Найти все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте - Prolog

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

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

Найдите все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте. Для этого напишите программу. Как сделать можно? Очень буду благодарен

Решение задачи: «Найти все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте»

textual
Листинг программы
find_all_perm(L, Res) :-
    findall( L1, (permutation(L, L1), not_in_place(L1)), Res ),
    forall( member(X, Res), writeln(X) ).
 
not_in_place(L) :-
    not_in_place(L, 1).
    
not_in_place([], _).
not_in_place([H|T], N) :-
    not(H = N),
    N1 is N + 1,
    not_in_place(T, N1).

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

Код решает задачу поиска всех перестановок чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте. Вводная часть кода:

  1. find_all_perm(L, Res) :- - определение переменной Res, которая будет хранить все перестановки
  2. findall( L1, (permutation(L, L1), not_in_place(L1)), Res ), - вызов функции findall, которая ищет все перестановки с помощью правила permutation(L, L1), и с помощью условия not_in_place(L1) проверяет, что числа не стоят на своих местах
  3. forall( member(X, Res), writeln(X) ). - вывод всех найденных перестановок с помощью цикла forall и функции writeln Следующая часть кода - это определение функции not_in_place, которая проверяет, что числа не стоят на своих местах:
  4. not_in_place(L) :- - определение переменной L, которая является списком чисел
  5. not_in_place(L, 1). - рекурсивный вызов функции not_in_place для первого числа в списке L
  6. not_in_place([], _). - базовый случай, когда список пустой
  7. not_in_place([H|T], N) :- - рекурсивный вызов функции not_in_place для списка T и проверка, что текущее число H не равно N
  8. N1 is N + 1. - увеличение значения N на единицу
  9. not_in_place(T, N1). - рекурсивный вызов функции not_in_place для списка T и нового значения N1 Таким образом, код проверяет все возможные перестановки чисел 1, 2, 3, 4 и 5, и выводит только те, в которых числа не стоят на своих местах.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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