![]() |
Алгоритм решения задачи "Лестницы"
Добрый день!
Задался решением одной задачки. перепробовал тонну вариантов, но никак не могу найти правильное решение. Подскажите, как быть? Какой алгоритм решения? В интернете наверняка есть готовое решение, но я не искал - не хочу. Желание дойти самому или с вашей помощью)) Спасибо! |
Идея примерно такая:
1. Т.как sum(1..n) = n(n+1)/2, то максимальное количество колонок можно рассчитать зная n - floor(sqrt(n*2)). Это число - количество итераций во внешнем цикле. 2. Высота первой колонки задает количество возможных комбинаций для оставшихся колонок - т.е. следующий вложеный цикл можно делать по высоте первой колонки. 3. Дальше, задачу можно описать рекурсивно: отнимаем от общего количества квадратов высоту самой левой колонки и решаем ту же задачу для разности пока не останемся только с одной дополнительной колонкой (основа рекурсии). Решение, к сожалению, получается что-то ипа n^3 по сложности. Возможно есть аналитическое, более простое решение, но что-то не придумывается. Очень наивное решение на Прологе: Код:
split(X, Y) :- split(0, X, Y).Ниже: список первых 80 результатов: Код:
[1 1] [2 1] [3 2] [4 2] [5 2] [6 3] [7 4] [8 4] [9 5] [10 7] |
| Часовой пояс GMT +4, время: 12:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.