这类问题,都是找前后两个数之间x,y之间的关联,比如x%n+1
int main() {
int n,b[10][10]={1},x=0,y=0;
cin>>n;
/*for(int i=2;i<=n*n;) {
while(y<n-1&&b[x][y+1]==0) b[x][++y]=i++;
while(x<n-1&&b[x+1][y]==0) b[++x][y]=i++;
while(y>0&&b[x][y-1]==0) b[x][--y]=i++;
while(x>0&&b[x-1][y]==0) b[--x][y]=i++;
}*/
int law[4][2]={0,1,1,0,0,-1,-1,0},d=0;
for(int i=2;i<=n*n;i++) {
int tx=x+law[d][0],ty=y+law[d][1];
if(tx>n-1||tx<0||ty>n-1||ty<0||b[tx][ty]) d=(d+1)%4;
x+=law[d][0];y+=law[d][1];
b[x][y]=i;
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
cout<<setw(3)<<setfill(' ')<<b[i][j];
}
cout<<endl;
}
return 0;
}