| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > магический квадрат |
| Автор: 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 | ||
математика тебе позволит быстро определить допустимые для данного набора чисел суммы (их может не быть ни одной - т.е. магический квадрат не получится, а может быть и несколько - впрочем допустимая сумма не обязана быть реализуемой нна практике). Это даст возможность резко снизить количество вариантов при переборе. |
| Автор: SoWa 5.12.2005, 20:27 | ||
Не получается он только когда 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 Вот так! Выделеные цветом цифры поставишь на места выделенных еулей. |