Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > магический квадрат


Автор: Rick 3.12.2005, 19:44
приветствую
попалась на глаза мне задача по построение магических квадратов, начал делать простым перебором, но вскоре понял, что это нереально. По этому поводу хочу узнать, есть ли другие способы, возможно есть какое-то математическое решение.

(в поиске ничего подобного не нашел, если все-таки есть, укажите ссылку)
заранее благодарен.

Автор: DeadSoul 3.12.2005, 19:54
Если имеется ввиду квадрат 3 на 3, то там всегда 5 в центре

Автор: SoWa 4.12.2005, 20:38
Вот гляди:
Дана сторона квадрата. Если она- четное число-квадрата нет.
Иначе строим решетку:
Для квадрата стороной 3:

00300
02060
10509
04080
00700

Т.е. выставляем в клеточки по диагонали цифры по порядку, по N штук в ряд.
В этом примере это 123 456 и 789.
Потом отмечаешь вокруг центрального элемента квадрат, и все, что нажодится по сторонам квадрата, заворачиваешь вовнутрь. Я нарисую картинку, выложу.

Автор: Akina 4.12.2005, 21:40
Цитата(Rick @ 3.12.2005, 20:44)
возможно есть какое-то математическое решение.

математика тебе позволит быстро определить допустимые для данного набора чисел суммы (их может не быть ни одной - т.е. магический квадрат не получится, а может быть и несколько - впрочем допустимая сумма не обязана быть реализуемой нна практике). Это даст возможность резко снизить количество вариантов при переборе.

Автор: SoWa 5.12.2005, 20:27
Цитата(Akina @ 4.12.2005, 21:40)
т.е. магический квадрат не получится,

Не получается он только когда N=1, N=2, N=2K. Когда N=2k+1 квадрат существует, однозначно.
Вот для N=5

Такая решетка:
0_0_0_0_5_0_0_0_0
0_0_0_4_0_10_0_0_0
0_0_3_0_9_0_15_0_0
0_2_0_8_0_14_0_20_0
1_0_7_0_13_0_19_0_25
0_6_0_12_0_18_0_24_0
0_0_11_0_17_0_23_0_0
0_0_0_16_0_22_0_0_0
0_0_0_0_21_0_0_0_0
преобразуется в такой квадрат:
3_16_9_22_15
20_8_21_14_2
7_25_13_1_19
24_12_5_18_6
11_4_17_10_23
"_"- разделитель между клеточками.

Автор: Rick 5.12.2005, 21:38
3_4_9_10_15 =41 ,а
11_16_17_22_23= 89 это же не магический квадрат или я тебя не так понял

Автор: SoWa 6.12.2005, 20:35
Прости, я не то показал, надо так:

0_0_0_0_5_0_0_0_0
0_0_0_4_0_10_0_0_0
0_0_3_0_9_0_15_0_0
0_2_0_8_0_14_0_20_0
1_0_7_0_13_0_19_0_25
0_6_0_12_0_18_0_24_0
0_0_11_0_17_0_23_0_0
0_0_0_16_0_22_0_0_0
0_0_0_0_21_0_0_0_0

3_16_9_22_15
20_8_21_14_2
7_25_13_1_19
24_12_5_18_6
11_4_17_10_23


Вот так!
Выделеные цветом цифры поставишь на места выделенных еулей.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)