思路 用循环和判断进行分析,可以得出数组的变化方向 最后调用函数

#include<stdio.h> int main() { int n; scanf("%d",&n); int arr[1001][1001]={0}; arr[0][0]=1; int count=2; int pos=1;//1表示右上,-1表示左下 int i=0,j=0;//i表示行,j表示列 while(count<=n*n) { //先判定四种情况 if(i==0&&j<n-1&&pos==1)//上边界,行不变,列增加 { arr[i][++j]=count++; pos=-1;//改变方向 } else if(i<n-1&&j==0&&pos==-1)//左边界,行增加,列不变 { arr[++i][j]=count++; pos=1; } else if(i<n-1&&j==n-1&&pos==1)//右边界,行增加,列不变 { arr[++i][j]=count++; pos=-1; } else if(i==n-1&&j<n-1&&pos==-1)//下边界,行不变,列增加 { arr[i][++j]=count++; pos=1; } else if(pos==1)//右上 { arr[--i][++j]=count++; } else if(pos==-1)//左下 { arr[++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; }