#include<stdio.h>
int main(){
int snake[100][100];
int number;
scanf("%d",&number);
int number1=number+1;
int upright=0,downleft=0;
int one=1;
int spot=1;
int i,j;
while (spot<number*number+1){
i=number1;
j=number1;
if (upright==0 && downleft==0){
for (i=one;i<number1-one+1;i++){
snake[i][j-one]=spot;
spot++;
}
upright=0;
downleft=1;
}else if (upright==0 && downleft==1){
for(j=number-one;j>one-1;j--){
snake[i-one][j]=spot;
spot++;
}
upright=1;
downleft=0;
}else if (upright==1 && downleft==0){
for (i=number-one;i>one-1;i--){
snake[i][one]=spot;
spot++;
}
upright=1;
downleft=1;
}else if (upright==1 && downleft==1){
for (j=one+1;j<number1-one;j++){
snake[one][j]=spot;
spot++;
}
one++;
upright=0;
downleft=0;
}
}
for (i=1;i<number1;i++){
for(j=1;j<number1;j++){
printf("%d\t",snake[i][j]);
}
printf("\n");
}
}
主要通过
int upright,downleft;这两个参数来判断数字的行列变化,需要注意的地方就是已经写过数字的地方不能重复的在写数字,因此要注意snake数组的行列变化。
以上代码可以直接运行