#include<stdio.h>
int n,i,k,j,x[10100],y[10100],a[1000][1000];
int main(){
scanf("%d",&n);
x[1]=1;y[1]=n/2+1;a[1][y[1]]=1;
for(i=2;i<=n*n;i++){
if(x[i-1]==1&&y[i-1]!=n){
a[n][y[i-1]+1]=i;
x[i]=n;y[i]=y[i-1]+1;
}
else if(x[i-1]!=1&&y[i-1]==n){
a[x[i-1]-1][1]=i;
x[i]=x[i-1]-1;
y[i]=1;
}
else if(x[i-1]==1&&y[i-1]==n){
a[2][n]=i;
x[i]=2;
y[i]=n;
}
else if(x[i-1]!=1&&y[i-1]!=n){
if(!a[x[i-1]-1][y[i-1]+1]){
a[x[i-1]-1][y[i-1]+1]=i;
x[i]=x[i-1]-1;
y[i]=y[i-1]+1;
}
else {
a[x[i-1]+1][y[i-1]]=i;
x[i]=x[i-1]+1;
y[i]=y[i-1];
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
这个是对的,但之前因为数组开的都比较小,所以试了几次看题解才过