代码段
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int ar[50][50] = {0};
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &ar[i][j]);
}
}
for (i = 0; i <= 2 * n - 2; i++) {
for (j = 0; j < n; j++) {
if (i % 2 == 0) { //偶数行
if (i - j >= 0 && i - j <= n - 1) {
printf("%d ", ar[i - j][j]);
}
} else { //奇数行
if (i - j >= 0 && i - j <= n - 1) {
printf("%d ", ar[j][i - j]);
}
}
}
}
return 0;
}
启示
原先在思考算法的时候,感觉是分步考虑的,而这个算法是整体考虑的(走对角线),而要哪些数字可以通过一些限制来实现,而方向也可以通过调整行列的顺序来实现。总体挑选出这些数字的方法就一步,而不应该拆分出许多步骤处理。(原因:根据不同行,不同矩阵得到处理步骤有所不同)