Я работаю над программой тестирования магического квадрата, которая определяет, соответствуют ли значения в двумерном массиве магическому квадрату. Это означает, что каждая строка, столбец и диагональ складываются в одинаковые значения, и что более важно для моего случая, что каждое число уникально и не повторяется.
Я понял все остальное, за исключением того, как определить, являются ли значения уникальными. Я подумал, что было бы неплохо создать отдельный массив одного измерения и передать в него значения из двухмерного массива. Затем я подумал, что проверю значения друг против друга, чтобы увидеть, повторятся ли они. Кажется, моя логика где-то неверна, но я не уверен, где. Вот что я придумала до сих пор:
#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. Я исправил это, и теперь он печатается как следует, что, по-видимому, указывает на то, что ошибка заключается не в передаче его из многомерного массива, а в том, как я его тестирую, поскольку оба массива в конце оказываются недействительными ,
Задача ещё не решена.
Других решений пока нет …