Написать программу, которая определяет, сколько различных вариантов очереди могут образовать люди. - Lisp

Узнай цену своей работы

Формулировка задачи:

К театральной кассе направляются n человек. Написать программу, которая определяет, сколько различных вариантов очереди могут образовать эти люди. Буду очень признательна, если кто-то поможет решить!

Решение задачи: «Написать программу, которая определяет, сколько различных вариантов очереди могут образовать люди.»

textual
Листинг программы
(defun permutate (w)
  (when w (if (cdr w)
              (loop for a in w
                    nconc (mapcar #'(lambda (e) (cons a e))
                                  (permutate (remove a w))))
              (list w))))
 
> (permutate '(1 2 3))
((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))

Объяснение кода листинга программы

В коде определена функция PERMUTE, которая принимает в качестве аргумента W список элементов. Если W не равен NIL, то рекурсивно вызывается функция PERMUTE для каждого элемента списка W, и каждый раз к результату добавляется новый элемент. Если W равен NIL, то возвращается список W. Код выполняет перебор всех возможных вариантов перестановки элементов в списке W и выводит каждый вариант в консоль.

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы