满意答案
wsh422
2014.02.16
采纳率:53% 等级:12
已帮助:6323人
第一个#include int a[100][100];int main(){ int i,j,k,n; scanf("%d", &n); memset(a,-1,sizeof(a)); //将数组设置为-1 for (i=1;i<=n;i++) //将n*n的区域赋值为0 for (j=1;j<=n;j++) a[i][j]=0; k=2; i=2; a[1][1]=1; j=1; while (1) { if (a[i][j] == -1) { break; } while (a[i][j]==0) a[i--][j++]=k++; i++; while (a[i][j]==0) a[i++][j--]=k++; j++; } if (i == n + 1) { i--; j++; while (k <= n * n) { while (a[i][j]==0) a[i--][j++]=k++; i+=2; j--; while (a[i][j]==0) a[i++][j--]=k++; j+=2; i--; } } else { j-=2; i++; while (k <= n * n) { while (a[i][j]==0) a[i++][j--]=k++; j+=2; i--; while (a[i][j]==0) a[i--][j++]=k++; i+=2; j--; } } for (i=1;i<=n;i++) { for (j=1;j<=n;j++) printf("%3d",a[i][j]); printf("\n"); } return 0;}第二个#include int a[100][100];int main(){ int i,j,k,n; scanf("%d", &n); memset(a,-1,sizeof(a)); //将数组设置为-1 for (i=1;i<=n;i++) //将n*n的区域赋值为0 for (j=1;j<=n;j++) a[i][j]=0; k=2; i=1; a[1][1]=1; j=2; while (k<=n*n) { while (a[i][j]==0) //如果还是0,就从左到右赋值 a[i][j++]=k++; i++; j--; //将i,j设为刚赋值位置的下面一个位置 while (a[i][j]==0) //如果还是0,就从上到下赋值 a[i++][j]=k++; i--; j--; //将i,j设为刚赋值位置的左面一个位置 while (a[i][j]==0) //如果还是0,就从右到左赋值 a[i][j--]=k++; i--; j++; //将i,j设为刚赋值位置的上面一个位置 while (a[i][j]==0) //如果还是0,就从下到上赋值 a[i--][j]=k++; i++; j++; //将i,j设为刚赋值位置的右面一个位置 } for (i=1;i<=n;i++) //打印结果 { for (j=1;j<=n;j++) printf("%3d",a[i][j]); printf("\n"); } return 0;}
10分享举报