本题采用下标计算的方法解决,具体方案是:
对于按对角线展开的每行上的元素,其纵坐标与横坐标之和总为对应的行数,此外,奇数行和偶数行下标增长的顺序不同,注意以上两点即可。
#include<stdio.h>
int a[500][500];
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &a[i][j]);
int count = (n - 1) * 2 + 1 - 1;//count + 1表示一个边长为n的方阵对角线方向的行数;
for(int i = 0; i <= count; i++) {
if(i < n) {
if(i % 2 == 0)
for(int p = i; p >= 0; p--)
printf("%d ", a[p][i - p]);
else if(i % 2 == 1) //i < n表示当前行在上三角矩阵;
for(int p = 0; p <= i; p++)
printf("%d ", a[p][i - p]);
} else {
if(i % 2 == 0)
for(int p = n - 1; p >= i - n + 1; p--)
printf("%d ", a[p][i - p]);
else if(i % 2 == 1)
for(int p = i - n + 1; p <= n - 1; p++)
printf("%d ", a[p][i - p]);
}//表示当前行在三角矩阵;
}
return 0;
}