//上一道题的思路:通过界定范围来判断是否要改变方向,以及改变方向的顺序和变化,适合初学者使用,写的太啰嗦了,自己参透去吧 #include<stdio.h> int main(){ int n,dir=0,i=1,j=1,count=1,hui[50][50]={0}; scanf("%d",&n); for(int i=0;i<=n+1;i++){ if(i==0||i==n+1)for(int j=0;j<=n+1;j++)hui[i][j]=1; hui[i][0]=hui[i][n+1]=1; } while(count<=n*n){ hui[i][j]=count++; if(dir==0&&hui[i][j+1]==0){j++;dir=1;} else if(dir==1&&hui[i+1][j-1]==0){i++;j--;} else if(dir==2&&hui[i-1][j+1]==0){i--;j++;} else { if(dir==1&&hui[i+1][j]==0){i++;dir=2;continue;} if(dir==2&&hui[i][j+1]==0){j++;dir=1;continue;} if(dir==1&&hui[i][j+1]==0){j++;dir=2;continue;} if(dir==2&&hui[i+1][j]==0){i++;dir=1;continue;} } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ printf("%d ",hui[i][j]); } printf("\n"); } }