代碼給妳了,可能有點長。
輸入5即有結果。
#include <stdio.h>
int main()
{
int n,k,a[30][30]={0},x=0,y=0,w[5]={1,1,1,1,1};
scanf("%d",&n);
k=2;
a[0][0]=1;
while(k<=n*n){
if(w[1]&&(x>0&&a[x-1][y]==0)) {
a[x-1][y]=k;
k++;
x--;
if(x>0&&a[x-1][y]==0)
w[1]=1,w[2]=0,w[3]=0,w[4]=0;
else w[1]=0,w[2]=1,w[3]=1,w[4]=1;
}
else if(w[2]&&(y<n-1&&a[x][y+1]==0)){
a[x][y+1]=k;
k++;
y++;
if(y<n-1&&a[x][y+1]==0)
w[1]=0,w[2]=1,w[3]=0,w[4]=0;
else w[1]=1,w[2]=0,w[3]=1,w[4]=1;
}
else if(w[3]&&(x<n-1&&a[x+1][y]==0)){
a[x+1][y]=k;
k++;
x++;
if(x<n-1&&a[x+1][y]==0)
w[1]=0,w[2]=0,w[3]=1,w[4]=0;
else w[1]=1,w[2]=1,w[3]=0,w[4]=1;
}
else if(w[4]&&(y>0&&a[x][y-1]==0)){
a[x][y-1]=k;
k++;
y--;
if(y>0&&a[x][y-1]==0)
w[1]=0,w[2]=0,w[3]=0,w[4]=1;
else w[1]=1,w[2]=1,w[3]=1,w[4]=0;
}
}
for(k=0;k<n;k++){
int t=1;
for(x=0;x<n;x++){
if(t){
if(n<=3) printf("%-d",a[k][x]);
else if(n<=9) printf("%-2d",a[k][x]);
else printf("%-3d",a[k][x]);
t=0;
}
else {
if(x==n-1) printf(" %-d",a[k][x]);
else {
if(n<=3) printf(" %-d",a[k][x]);
else if(n<=9) printf(" %-2d",a[k][x]);
else printf(" %-3d",a[k][x]);
}
}
}
printf("\n");
}
return 0;
}