华为机试在线训练_蛇形矩阵(数组)
蛇形矩阵
http://www.nowcoder.com/questionTerminal/649b210ef44446e3b1cd1be6fa4cab5e
/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
作者:水木清华
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;
}大厂面试 文章被收录于专栏
分享有用的面试经历,倾吐有心的面试感悟,讲述有趣的面试故事,以飨读者。 常用语言是C++,编程力求规范整洁,题解清晰完整,像写诗一样去写代码。 本专栏文章系「人工智能安全」(微信公众号)原创,转载请联系本文作者。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师,期待与你的思想交流碰撞出智慧的花火。
顺丰集团工作强度 406人发布


