Ну что же, пожалуй, я покажу алгоритм проверки построения квадрата Стенли 5-го порядка, как я поняла его в изложении
whitefox.
Сразу замечу, что мой алгоритм (изложенный выше) несколько отличается от алгоритма
whitefox.
Схему квадрата Стенли обозначим так:
Код:
a11 a12 a13 a14 a15
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
Набор из 25 чисел я выбрала такой, из чисел которого квадрат составляется:
Код:
0, 2, 6, 8, 12, 18, 26, 32, 36, 38, 48, 62, 66, 68, 78, 92, 96, 98, 108, 122, 126, 132, 162, 192, 222
Требования к набору:
1. нормализация;
2. упорядоченность (числа расположены строго по возрастанию).
Ну и разумеется, набор должен удовлетворять необходимому условию: сумма всех чисел набора кратна 5. Иначе набор и проверять не имеет смысла.
Итак, начинаем: сразу же выполняем следующие присвоения:
Код:
a11=0, a55=222
Далее начинаем перебор 4-х элементов квадрата: a12, a13, a14, a15, при этом перебирать их надо так:
(основываясь на свойствах квадрата Стенли).
Первая подходящая комбинация будет такой, при которой сложится последняя строка квадрата, так как все элементы этой строки сразу же вычисляются при задании элементов a12, a13, a14, a15.
Вот, например, такая подходящая комбинация для этих четырёх перебираемых элементов:
Код:
a11=6
a12=36
a13=66
a14=96
Тогда квадрат принимает вид (с полными первой и пятой строками):
Код:
0 6 36 66 96
x x x x x
x x x x x
x x x x x
126 132 162 192 222
Теперь выбрасываем из набора использованные элементы, оставшийся набор:
Код:
2, 8, 12, 18, 26, 32, 38, 48, 62, 68, 78, 92, 98, 108, 122
Опять же основываясь на свойствах квадрата Стенли, элементу a21 мы даём только одно значение - минимальное в оставшемся наборе. То есть этот элемент (как и следующие - a31 и a41) уже и не перебирается.
Итак, присваиваем:
.
Сразу вычисляем элементы второй строки. Если каждый из них принадлежит оставшемуся набору, всё хорошо - можно идти дальше. В противном случае - возврат на поиск другой подходящей комбинации элементов a12, a13, a14, a15.
[
Внимание! Вот здесь и видим действие "перебора с возвратом".]
В данном примере имеем полностью хорошую вторую строку:
Код:
0 6 36 66 96
2 8 38 68 98
x x x x x
x x x x x
126 132 162 192 222
Ну, и думаю, не надо показывать, как проверить построение оставшихся двух строк квадрата - надо повторить все действия, которые выполнялись при заполнении второй строки.
Окончательное решение:
Код:
0 6 36 66 96
2 8 38 68 98
12 18 48 78 108
26 32 62 92 122
126 132 162 192 222
S=370
Таким образом, в алгоритме
whitefox фактически 4 свободных переменных!
Если есть вопросы по описанию алгоритма, пожалуйста, задавайте. На что смогу, отвечу.
В примере использован наименьший квадрат Стенли 5-го порядка из
не последовательных простых чисел
Pavlovsky.