/* 本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师 期待与你的思想交流碰撞出智慧的花火 作者:水木清华 2020-05-05 蛇形矩阵 */ //解题思路:笨方法 //蛇形矩阵,顾名思义像蛇摆一样,具有弯曲但连续这个特点; //从矩阵特点来看,就是沿着方阵的主对角线斜向下方向,以及沿着副对角线斜向上,依次递增 1; //从输出矩阵元素的个数来看,总数是一个首项为 1 且公差为 1 的等差数列前 N 项和; //利用等差数列的规律,可以得知,每一行或每一列的数列是一个阶梯级数(相邻两项的差逐渐递增)。 #include <iostream> using namespace std; //输出蛇形矩阵的函数接口 int SerpentineMatrix (int N) { int Column_d = 1; //初始化列间相邻两项的第一个差 int ColumnFirstItem = 1; //列首项 int RowFirstItem = 1; //行首项 //按行顺序输出矩阵元素 for (int i = 1; i <= N; i++) { RowFirstItem = ColumnFirstItem; //将第 1 列的第 i 个元素按顺序拷贝作为第 i 行的首个元素 cout << ColumnFirstItem << ' '; //输出第 i 行的首个元素 ColumnFirstItem += Column_d; Column_d++; //相邻两项的差递增 1 int Row_d = i + 1; //初始化第 i 行元素的行间相邻两项的第一个差 //按列顺序输出第 i 行的矩阵元素 for (int j = i + 1; j <= N; j++) { RowFirstItem += Row_d; cout << RowFirstItem << ' '; //输出第 i 行除首个元素之外的其余元素 Row_d++; //相邻两项的差递增 1 } cout << endl; //第 i 行元素输出结束,换行。 } return 0; } //主函数 int main (){ int N; //矩阵的阶数 N,由于是正整数,故大于或等于 1。 while (cin >> N) { SerpentineMatrix (N); } return 0; }