幻方(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