Дана довільна множина навчальних предметів. Потрібно побудувати всі можливі перестановки цих предметів при складанні розкладу.
Ідею можна коротко сформулювати наступним чином:
Алгоритм являє собою цикл прокруток елементів різної довжини. Звідси виникає
здійснення підрахунку кількості перестановок різної довжини. Заведемо
лічильники для перестановок. Лічильник із номером 2 буде рахувати кількість
перестановок довжини 2, лічильник із номером 3 – кількість перестановок довжини
3 і так далі. Тоді ядро алгоритму – це цикл, в тілі якого здійснюється пошук
лічильника, чиє значення менше від його номера. Перевірка значень лічильників
повинна виконуватись із меншого номера. Це необхідно для того, щоб забезпечити
виконання умови «Нову перестановку довжини А можна будувати лише тоді, коли
побудовані всі перестановки меншої довжини». Як тільки побудована перестановка
довжини А, знову з’являється необхідність у побудові всіх перестановок меншої
довжини, для чого відповідні лічильники необхідно обнулити.
Лічильник із номером 1 нам не потрібний, так як
переставлять останній елемент сам із собою не потрібно.
input.txt | output.txt | perest.pas |