Распределить числа от 1 до n по трем коробкам A, B, C, таким образом, чтобы выполнялись следующие условия - Prolog

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

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

Распределить числа от 1 до n по трем коробкам A, B, C, таким образом, чтобы выполнялись следующие условия: - в коробке А могут находиться только четные числа; - в коробке B могут находиться только нечетные числа; - если число i находится в некоторой коробке, тогда число k=2*i (k≤n), не может находиться в этой же коробке.

Решение задачи: «Распределить числа от 1 до n по трем коробкам A, B, C, таким образом, чтобы выполнялись следующие условия»

textual
Листинг программы
  1. fill_boxes(N, A, B, C) :-
  2.     retractall( filled_boxes(_, _, _) ),
  3.     make_nums(N, Ns),
  4.     permutation(Ns, Ns1),
  5.     fill_boxes(Ns1, [], [], [], A, B, C),
  6.     not( filled_boxes(A, B, C) ),
  7.     assertz( filled_boxes(A, B, C) ).
  8.  
  9. fill_boxes(Ns, A0, B0, C0, A, B, C) :-
  10.     fill_boxes_(Ns, A0, B0, C0, A, B, C),
  11.     !.
  12.  
  13. fill_boxes_([], A, B, C, A, B, C).
  14. fill_boxes_(Ns, A, B, C, A2, B2, C2) :-
  15.     inc_box(a, Ns, Ns1, A, A1),
  16.     inc_box(b, Ns1, Ns2, B, B1),
  17.     inc_box(c, Ns2, Ns3, C, C1),
  18.     fill_boxes_(Ns3, A1, B1, C1, A2, B2, C2).
  19.  
  20. inc_box(Nick, Ns, Ns1, Box, [N | Box]) :-
  21.     select(N, Ns, Ns1),
  22.     check_num_nick(Nick, N),
  23.     check_num(N, Box).
  24. inc_box(_, Ns, Ns, Box, Box).
  25.  
  26. check_num_nick(a, N) :-
  27.     N mod 2 =:= 0.
  28. check_num_nick(b, N) :-
  29.     N mod 2 =:= 1.
  30. check_num_nick(c, _).
  31.  
  32. check_num(N, Box) :-
  33.     member(N1, Box),
  34.     N1 is 2 * N,
  35.     !,
  36.     fail.
  37. check_num(_, _).
  38.  
  39. make_nums(N, [N | Ns]) :-
  40.     N > 0,
  41.     N1 is N - 1,
  42.     !,
  43.     make_nums(N1, Ns).
  44. make_nums(_, []).

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


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

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

9   голосов , оценка 4.444 из 5

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

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

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