C生成奇数阶幻方矩阵

幻方(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 n;
    scanf("%d", &n);
    get_magicsquares(n);
    return 0;
}

posted @ 2019-03-24 09:58  没尾巴的刺刺鱼  阅读(164)  评论(0编辑  收藏  举报