C++ 如何创建多个2D幻方阵列?

C++ 如何创建多个2D幻方阵列?,c++,arrays,multidimensional-array,2d,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];

我一直在编写一些代码,生成一个幻方,它基本上是一个大小为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--;
    }

是的,你可以。魔方展览

您可以利用此属性创建其他幻方,例如:

以下是程序生成的3x3幻方:

2 9 4 
7 5 3 
6 1 8
+1:同一个正方形水平镜像:

+2:原始方形垂直镜像:

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


所有这些都满足幻方的属性。

您还可以沿对角线轴镜像它,并获得另外两个幻方。
4 9 2 
3 5 7 
8 1 6
6 1 8 
7 5 3 
2 9 4
8 1 6 
3 5 7 
4 9 2