题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1
参考了大佬的思路,做点详细的说明,方便日后回看
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[1001][1001] = {0};
int i = 1, j = 1, k = 0, pos = 1;
a[i][j] = 1;
for (k = 2; k <= n * n; k++) {
if (i == 1 && j < n && pos == 1) { //碰到上边界
a[i][++j] = k;
pos = -1;
} else if (j == 1 && i < n && pos == -1) { //碰到左边界
a[++i][j] = k;
pos = 1;
} else if (j == n && pos == 1 && i < n) { //碰到右边界
a[++i][j] = k;
pos = -1;
} else if (i == n && pos == -1 && j < n) { //碰到下边界
a[i][++j] = k;
pos = 1;
} else if (pos == 1) { //除去边界情况,中间移动过程
a[--i][++j] = k;
} else if (pos == -1) {
a[++i][--j] = k;
}
}
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}