В моем случае проблема заключалась в отсутствии строки XamlCompilation(XamlCompilationOptions.Compile)]
в файле .xaml.cs.
Пример:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
BindingContext = new MainPageViewModel();
}
...
}
кажется, что sum3 var повторно инициализируется в 0 внутри цикла вычислений, плюс проверка равенства по диагональной сумме должна быть вне цикла.
Я бы переработал это следующим образом:
//For Diagonals
sum = 0;
sum3 = 0;
for (row = 0; row < n; row++) {
sum += square[row][row];
sum3 += square[row][n - 1 - row];
}
if (sum == sum3)
boolean = 1;
else {
return FALSE;
}
Кстати, я немного упростил вычисление диагонали, так как оно линейное, нет необходимости в 2 вложенных циклах.
Я обнаружил некоторые другие ошибки в финальных проверках:
-0 не должно быть действительным значением
-обращение, а не просто разрыв (существует только внутренний цикл, внешний цикл продолжается)
for (row = 0; row < n; row++) {
for (col = 0; col < n; col++) {
if(square[row][col] > n*n || square[row][col] <= 0) {
return FALSE;
}
}
}
//Check for Repeating Numbers
int storedNumbers[n * n];
for (row = 0; row < n; row++) {
for(col = 0; col < n; col++) {
storedNumbers[row + n * col] = square[row][col];
}
}
Затем отсканируйте сохраненные номера на наличие дубликатов. Поиск повторяющихся значений в массиве
ура
Вы можете использовать более компактную схему, чтобы проверить, что все числа 1 .. (n*n)
используются без дубликатов с использованием кода, такого как:
int counts[n * n]; // Can't use an initializer with a VLA
memset(counts, '\0', sizeof(counts));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (square[i][j] <= 0 || square[i][j] > n * n)
return FALSE;
counts[square[i][j] - 1]++; // Map 1..n*n to 0..n*n-1
// if (++counts[square[i][j] - 1] > 1)
// return FALSE;
}
}
for (int i = 0; i < n * n; i++)
{
if (counts[i] != 1)
return FALSE;
}
Поскольку существует n*n
элементов для проверки, этот код использует пространство и время, которые являются линейными по отношению к количеству элементов в магическом квадрате, который находится в пределах постоянного фактора оптимального.