题目描述:
输入整数N,输出一个N阶的二维数组。
数组的形式参照样例。
输入格式
输入包含多行,每行包含一个整数N。
当输入行为N=0时,表示输入结束,且该行无需作任何处理。
输出格式
对于每个输入整数N,输出一个满足要求的N阶二维数组。
每个数组占N行,每行包含N个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
数据范围
扫描二维码关注公众号,回复:
12507827 查看本文章
0≤N≤1000≤N≤100
输入样例:
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,2,3,。。。等
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 109;
int n;
int a[MAX][MAX];
int main()
{
while(scanf("%d", &n))
{
if(n == 0)
break;
int m = n - 1;
for(int i = 0; i < n; i++)
a[i][i] = 1;
int cou = 2;
while(m -- )
{
for(int i = 0; i < n - cou + 1; i ++)
{
int row = i + cou - 1;
int col = i;
a[row][col] = a[col][row] = cou;
//printf("row = %d col = %d cou = %d a = %d\n", row, col, cou, a[row][col]);
}
cou++;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}