我正在研究魔方测试程序,该程序确定二维数组中的值是否有资格作为魔方。这意味着每个行,列和对角线加起来相同的值,更重要的是,对于我的情况,每个数字都是唯一的,不会重复。
除了如何确定这些值是否唯一之外,我还想出了其他所有内容。我认为创建一个单独的单维数组并将二维数组中的值输入其中是个好主意。然后我想我会相互测试这些值,看看是否有重复。在某个地方,我的逻辑似乎是错误的,但我不知道在哪里。这是我到目前为止所提出的:
#include <iostream>
using namespace std;
const int D=3;
void evalSquare(int [][D], int, int);
int main()
{
int validSquare[D][D] = {{4, 9, 2},
{3, 5, 7},
{8, 1, 6}};
int invalidSquare[D][D] = {{1, 1, 1},
{1, 1, 1},
{1, 1, 1}};
cout << "Inputing square one." << endl;
evalSquare(validSquare, 0, 0);
cout << "Inputting square two." << endl;
evalSquare(invalidSquare, 0, 0);
}
void evalSquare(int square[D][D], int R, int C)
{
int n=9, repeatedValuesTest[n], testValue, t;
bool magicSquare = false;
for(R=0, n=0; R<3; R++)
{
for(C=0; C<3; C++)
{
repeatedValuesTest[n] = square[R][C];
n++;
}
}
cout << repeatedValuesTest[0] << repeatedValuesTest[1] <<
repeatedValuesTest[2] << endl;
cout << repeatedValuesTest[3] << repeatedValuesTest[4] <<
repeatedValuesTest[5] << endl;
cout << repeatedValuesTest[6] << repeatedValuesTest[7] <<
repeatedValuesTest[8] << endl;
for(n=0; n<9; n++)
{
testValue = repeatedValuesTest[n];
for(t=n; t<9; t++)
{
if (testValue==repeatedValuesTest[t])
{
magicSquare = false;
}
}
if(magicSquare)
{
cout << "This is a magic square" << endl;
}
else
cout << "This is not a magic square" << endl;
}
以下是正在打印的内容。
你可以看到,由于某种原因,在repeatValuesTest数组的值之后,它变得乱七八糟。这是因为我从一个二维数组传递到一维数组吗?我将如何以一种可行的方式进行此操作?
另外,我意识到可能有更好的方法来做我尝试做的事情,使用向量或其他东西,但我在一个基本的CompSci类中,并且数组和函数是迄今为止正如我们所获得的那样,这就是我们必须为这个项目所使用的东西。
提前致谢。
编辑:我意识到我在打印repeatValuesTest数组的内容时遇到了错误。我修复了它,现在它打印出来应该是,这似乎表明错误不是从多维数组传递它,而是我如何测试它,因为两个数组在最后都是无效的。