C生成奇数阶幻方矩阵

匿名 (未验证) 提交于 2019-12-02 23:26:52

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。

// 求取奇数阶幻方矩阵 #include<stdio.h> #define nums 100  int a[nums][nums];  void get_magicsquares(int n) {          if(n % 2 == 0) return; //如果是偶数,终止函数     int i,j;     i = 1;     j = (1+n)/2;     a[i][j] = 1;     for(int value = 2; value <= n*n; value++){         i -= 1;     //当前元素,放在之前元素的上一行,右侧一列,有如下几种特殊情况         j += 1;         if(i < 1 && j > n){ //如果当前元素在右上角则,存放在前一元素下一行同一列             i += 2;             j -= 1;         }else{             if(i < 1){     // 如果当前元素是第一行,则将其放在最后一行,前一元素右侧一列                 i = n;             }             if(j > n){      //如果当前元素是最右的一列,则放在第一列,前一元素上一行                 j = 1;             }         }         if(a[i][j] == 0){   //如果在原来的位置上有值则放在前一元素下一行,同一列             a[i][j] = value;         }else{             i += 2;             j -= 1;             a[i][j] = value;         }     }      for(int i = 1; i <= n; i++){         for(int j = 1; j <= n; j++){             printf("%d ", a[i][j]);         }         printf("\n");     }   }  int main(int argc, char const *argv[]) {     int a[nums][nums];     int n;     scanf("%d", &n);     for(int i = 1; i <= n; i++){         for(int j = 1; j <= n; j++){             a[i][j] = 0;         }     }          get_magicsquares(n);     return 0; } 
文章来源: https://blog.csdn.net/qq_38130747/article/details/88773827
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!