如何创建多个2D Magic Square阵列?

时间:2017-02-08 02:12:54

标签: c++ arrays multidimensional-array 2d

我一直致力于生成一个魔方的代码,这个代码基本上是一个大小为nxn的二维数组,元素范围从1到n ^ 2,每列,行和对角线总和相同号。

这是我到目前为止所遇到的问题,它每次创建相同的2d数组。我首先将1放在最右边的中间行。这种方法是否允许我创建3个魔术方块?

std::cout << "Enter the size of a magic square: \n";
    int n;
    std::cin >> n;
    int magicSquare[n][n];

    // set all slots as 0
    memset(magicSquare, 0, sizeof(magicSquare));

    // Initialize position for 1
    int row = n/2;
    int col = n-1;


    for (int num=1; num <= n*n; )
    {
        if (row==-1 && col==n)
        {
            row = 0;
            col = n-2;
        }
        else
        {

            if (col == n)
                col = 0;

            if (row < 0)
                row=n-1;
        }
        if (magicSquare[row][col])
        {
            col -= 2;
            row++;
            continue;
        }
        else
            magicSquare[row][col] = num++;

        col++;
        row--;
    }

1 个答案:

答案 0 :(得分:1)

是的,你可以。魔术广场展示reflection symmetry

您可以利用此属性制作其他魔术方块,作为示例

以下是您的程序生成的基础 3x3魔术方:

2 9 4 
7 5 3 
6 1 8

+1:相同的方形水平镜像

4 9 2 
3 5 7 
8 1 6

+2:原始方块垂直镜像

6 1 8 
7 5 3 
2 9 4

+3:原始正方形水平和垂直镜像

8 1 6 
3 5 7 
4 9 2

全部满足魔方的属性。