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

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

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

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

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

textual
Листинг программы
  1. find_all_perm(L, Res) :-
  2.     findall( L1, (permutation(L, L1), not_in_place(L1)), Res ),
  3.     forall( member(X, Res), writeln(X) ).
  4.  
  5. not_in_place(L) :-
  6.     not_in_place(L, 1).
  7.    
  8. not_in_place([], _).
  9. not_in_place([H|T], N) :-
  10.     not(H = N),
  11.     N1 is N + 1,
  12.     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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы