自己做出来的,加一减一真的很麻烦,但是调试出来其实也还行。
考场上肯定来不及罢了QAQ
![](https://img-blog.csdnimg.cn/img_convert/d608f9ca6e99bb6c7132f58657b5c194.png)
#include <stdio.h>
#include <math.h>
int main(){
int n, i = 0, j = 0, s = 0,m;
scanf("%d", &n);
int arr[100][100];
arr[0][0] = 1;
m = n;
//对应一个方框四个角的状态
//最后一个方框每行每列至多2个数字,所以控制n>=3
while(n >= 3){
//向右,列增加、行不变
if(i == s){
j++;
for(;j < n;j++){
arr[i][j] = arr[i][j-1]+1;
}
j--;
}
//向下,列不变、行增加
if(j == n - 1){
i++;
for(;i < n;i++){
arr[i][j] = arr[i-1][j]+1;
}
i--;
}
//向左,行不变、列增加
if(i == n - 1){
j--;
for(; j >= s; j--){
arr[i][j] = arr[i][j+1]+1;
}
j++;
s++; //此时完成一个来回,同一行或一列的数字个数减少1
}
//向上,列不变、行减少
if(j == s-1){
i--;
for(; i >= s; i--){
arr[i][j] = arr[i+1][j]+1;
}
i++;
}
n--; //变到里面一个方框再次循环
}
for(i =0;i<m;i++){
for(j=0;j < m;j++){
printf("%d \t",arr[i][j]);
}
printf("\n");
}
return 0;
}