题目描述
对于每个输入整数N,输出一个满足要求的N阶二维数组。
每个数组占N行,每行包含N个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
样例
输入样例:
1
2
3
4
5
0
输出样例:
1
1 2
2 1
1 2 3
2 1 2
3 2 1
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1
找规律直接推
从第一行看起,后面每一行1的位置都会往后移动一位,这说明每一行数字是跟行号有关系的,观察能得到i == j的时候是1,就是(j - i) + 1,在这个点后面都是递增的,在这个点前面都是递减的,满足这个规律的偶函数还是一次函数能想到的第一个规律便是求绝对值,所以易推出结论y = |j - i| + 1
时间复杂度
双重循环O($N^2$)
C++ 代码
/**
* author: xmmmmmovo
* generation time: 2021/01/21
* filename: 754. 平方矩阵 II.cpp
* language & build version : C 11 & C++ 17
*/
#include <iostream>
using namespace std;
int n;
int main() {
while (cin >> n && n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("%d ", abs(j - i) + 1);
}
printf("\n");
}
printf("\n");
}
return 0;
}