Этот код, который работает только для нечетных N. Проблема в том, что нет никаких идей, как добавить поддержку для четных значений NДоработка магический квадрат генератор
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
setlocale(0, "");
int n;
cout << "Enter the size of the magic square - ";
cin >> n;
int **matrix = new int *[n];
for (int i = 0; i < n; ++i)
{
matrix[i] = new int[n];
}
int nsqr = n * n;
int i = 0, j = n/2;
for (int k = 1; k <= nsqr; ++k)
{
matrix[i][j] = k;
i--;
j++;
if (k % n == 0)
{
i += 2;
--j;
}
else
{
if (j == n)
{
j -= n;
}
else if (i < 0)
{
i += n;
}
}
}
cout << "\n\nMagic square size - " << n << "\n\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << matrix[i][j] << "\t";
}
cout << endl;
}
for (i = 0; i < n; i++)
delete[] matrix[i];
delete[] matrix;
system("pause >> null");
return 0;
}
Я был бы признателен за советы по устранению неисправностей.
Если я не ошибаюсь, проблема в этой строке:
int i = 0, j = n/2;
Но я не знаю, как изменить код, чтобы поддерживать даже значения
Проверьте четные значения, используя 'значение% 2 == 0'. –
Добро пожаловать в переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –
Вам нужен совершенно другой алгоритм: http://math.stackexchange.com/questions/76411/how-to-construct-magic-squares-of-even-order – samgak