• C语言每日一题—魔幻矩阵


    魔幻矩阵
    编程实现9*9以内任意奇数阶方阵的魔幻矩阵。
    所谓奇数魔幻矩阵就是n*n的矩阵(n为奇数)的n*n个格子中放入数1到n*n,使得每行、每列、主对角线、付对角线上元素的和都相等。算法生成如下::
    1 ,第一个数字在第一行的中间位置
    2,以后每一个数放在前一个数的右上方,,如果向上超出了界限,在矩阵的最后一行插入,列不变;,如果右侧超出了界限,在矩阵的最左边插入,行不变。
    3.如果插入数的位置已经有数,则在前一个数的下方插入。.
    5*5魔幻矩阵:
    17 24  1  8 15
    23  5  7 14 16
     4  6 13 20 22
    10 12 19 21  3
    11 18 25  2  9
    输入提示:"input Magic matrix n:"
    输入格式:"%d"
    输出格式:"%4d"
    
    程序运行示例:
    input Magic matrix n:4
       9  15   1   7
      14   4   6   8
       3   5  11  13
       0  10  12   2
    1. #include
    2. int main()
    3. {
    4. int a[9][9]={0},i,j=0,n;
    5. printf("input Magic matrix n:");
    6. scanf("%d",&n);
    7. int k;
    8. if(n%2!=0) k=(n-1)/2;
    9. else k=n/2;
    10. for(i=1;i<=n*n;i++)//n*n个数,从1开始依次填入矩阵
    11. {
    12. if(j<0) j=n-1;//j代表行,当j<0时,j为最后一行
    13. if(k>n-1) k=0;//k代表列,当k>n-1时,k变为第一列
    14. if(a[j][k]==0)//判断该位置是否已经填入了数字,若没填,则填入
    15. {
    16. a[j][k]=i;
    17. }
    18. else//若已经填入了数字,则填到前一个数的下方
    19. {
    20. j=j+1+1;//j+1为前一个数的行,j+1+1为前一个数的下方
    21. k=k-1;//k-1为前一个数的列
    22. if(j>n-1) j=j-n;//当j=n或者n+1时,实际上为第一行和第二行
    23. if(k<0) k=n-1;//当k=-1时,实际上k=n-1即最后一列
    24. a[j][k]=i;
    25. }
    26. j=j-1;
    27. k=k+1;
    28. }
    29. for(i=0;i//打印该魔幻矩阵
    30. {
    31. for(j=0;j
    32. {
    33. printf("%4d",a[i][j]);
    34. }
    35. printf("\n");
    36. }
    37. return 0;
    38. }

  • 相关阅读:
    si24r1/nrf24l01
    给 Linux0.11 添加网络通信功能 (Day1: 确认 qemu-system-i386 提供了虚拟网卡)
    网络层详解
    Perl6中的垃圾收集
    千寻简Java词典音标版
    RabbitMQ Client (C/C++)
    (个人记录)Ensight后处理EDEM学习笔记
    mybatis逆向工程的构建及其概念
    浅析电力监控在新型数据中心的设计和应用-Susie 周
    【Harmony OS】【ARK UI】ETS 上下文基本操作
  • 原文地址:https://blog.csdn.net/2301_80163571/article/details/136766216