题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1
#include <stdio.h>
int main(){
int n, start, count = 0;
int arr[1000][1000] = {0};
scanf("%d",&n);
//i代表每轮对角线方向循环时行列坐标的和
for(int i = 0; i < 2 * n - 1; i++){
//关于start的含义,以和为偶对角线为例说明
//i < n - 1 时,纵坐标起始都为零;
//i >= n - 1 时,横坐标起始为n-1,故有:
//纵坐标起始都为 i - n - 1;
if(i < (n - 1)){
start = 0;
} else {
start = i - n + 1;
}
//对于每一条对角线上的循环,以纵坐标的变化来研究
for(int j = start; j <= i - start; j++){
count++;
if(i % 2 == 0){
//斜向上,纵坐标增加
arr[i - j][j] = count;
} else {
//坐下,横坐标增加
arr[j][i - j] = count;
}
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}