C语言——输出倒蛇阵

谁借莪1个温暖的怀抱¢ 2023-06-29 05:58 85阅读 0赞

第一种:

当n=2时:
3 1
4 2
当n=3时:
7 8 1
6 9 2
5 4 3

可归纳出第i圈的四边为:
a[i][n+1-i]->a[n+1-i][n+1-i],
a[n+1-i][n-i]->a[n+1-i][i],
a[n-i][i]->a[i][i],
a[i][i+1]->a[i][n-i]
从i=1开始赋值,当in+1-i时结束,当i=n+1-i时,a[i][i]=n*n;

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,n,m,num[21][21];
  5. while(scanf("%d",&n)&&n)
  6. {
  7. i=1;
  8. m=1;
  9. if(i==1) num[i][i]=1;
  10. while(i<n+1-i)
  11. {
  12. for(j=i;j<=n+1-i;j++) num[j][n+1-i]=m++; // 不会变的就是i,会变的就是j!!
  13. for(j=n-i;j>=i;j--) num[n+1-i][j]=m++;
  14. for(j=n-i;j>=i;j--) num[j][i]=m++;
  15. for(j=i+1;j<=n-i;j++) num[i][j]=m++;
  16. i++;
  17. if(i==n+1-i) {
  18. num[i][i]=n*n;break;
  19. }
  20. }
  21. for(i=1;i<=n;i++)
  22. {
  23. for(j=1;j<=n;j++)
  24. {
  25. if(j<n) printf("%d ",num[i][j]);
  26. else printf("%d",num[i][j]);
  27. }
  28. printf("\n");
  29. }
  30. printf("\n");
  31. }
  32. return 0;
  33. }

运行效果:
在这里插入图片描述
第二种:
1 8 7
2 9 6
3 4 5

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,n,m,num[25][25];
  5. while(scanf("%d",&n)&&n)
  6. {
  7. i=1;
  8. m=1;
  9. if(i==1) num[1][i]=1;
  10. while(i<n+1-i)
  11. {
  12. for(j=i;j<=n+1-i;j++) num[j][i]=m++;
  13. for(j=i+1;j<=n+1-i;j++) num[n+1-i][j]=m++;
  14. for(j=n-i;j>=i;j--) num[j][n+1-i]=m++;
  15. for(j=n-i;j>=i+1;j--) num[i][j]=m++;
  16. i++;
  17. if(i==n+1-i) {
  18. num[i][i]=n*n;break;
  19. }
  20. }
  21. for(i=1;i<=n;i++)
  22. {
  23. for(j=1;j<=n;j++)
  24. {
  25. if(j<n) printf("%d ",num[i][j]);
  26. else printf("%d",num[i][j]);
  27. }
  28. printf("\n");
  29. }
  30. printf("\n");
  31. }
  32. return 0;
  33. }

运行效果截图:
在这里插入图片描述
第三种:

倒蛇阵填数,任给一个正整数n(n<10),将1-n2分别填入矩阵,在显示器上输出如下格式的矩阵,
例如n=3时:
3 2 9
4 1 8
5 6 7
n=4时:
7 6 5 16
8 1 4 15
9 2 3 14
10 11 12 13

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,n,m,num[21][21];
  5. while(scanf("%d",&n)&&n)
  6. {
  7. i=1;
  8. m=n*n;
  9. if(n==1) num[1][1]=1;
  10. while(i<n+1-i)
  11. {
  12. for(j=i;j<=n+1-i;j++) num[j][n+1-i]=m--;
  13. for(j=n-i;j>=i;j--) num[n+1-i][j]=m--;
  14. for(j=n-i;j>=i;j--) num[j][i]=m--;
  15. for(j=i+1;j<=n-i;j++) num[i][j]=m--;
  16. i++;
  17. if(i==n+1-i) {
  18. num[i][i]=1;break;
  19. }
  20. }
  21. for(i=1;i<=n;i++)
  22. {
  23. for(j=1;j<=n;j++)
  24. {
  25. if(j<n) printf("%d ",num[i][j]);
  26. else printf("%d",num[i][j]);
  27. }
  28. printf("\n");
  29. }
  30. printf("\n");
  31. }
  32. return 0;
  33. }

运行截图:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言输出魔方

    魔方阵规则: 将1放在第一行中间一列 从2开始到n\n各数按以下规则一次存放:每个数存放的行数比前一个数-1,列数+1 若上一个数的行为1,则下一个数行为n