C++ 如何创建多个2D幻方阵列?
我一直在编写一些代码,生成一个幻方,它基本上是一个大小为nxn的二维数组,元素范围从1到n^2,每一列、每一行和每一对角线的总和都是相同的数字 到目前为止,问题是它每次都创建相同的2d数组。我首先把1放在最右边的中间一行。同样的方法能让我再创造3个魔方吗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];
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