Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Модифицированная задача про минимаксы
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
tusubj tusubj вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.12.2017
По умолчанию Модифицированная задача про минимаксы - 07.12.2017, 17:35

Здравствуйте, было задание: Имеется несколько романов одного писателя. Для каждого из них известен объем (число) страниц. Для издания сочинения романы надо сгруппировать в пары. Каждая пара будет печататься в одном томе. Если число романов нечетно, то один печатается в отдельном томе. Требуется найти такую группировку, при которой объем самого толстого тома минимален.

Его выполнил, но преподаватель попросил сделать еще случай, когда у нас одинаковое количество страниц в разных романах, и чтобы это все дело выводилось в таком виде: T=[[a(6,54)],[a(5,54),a(4,54)],[a(3,54),a(2,54)],[a(1,54),a(0,54)]], где 6, 5 и т.д. - идентификаторы тем самых романов. Препод сказал, что не до конца разобран случай, так как нужны все виды решений данной задачи, т.е. как я понял нужны еще решения с возможными перестановками, т.е. чтобы в первой паре была допустим перестановка T=[..., [a(4,54),a(5,54)],...] и т.д.

Помогите, пожалуйста. Вот код:
prolog Код:
domains
a = a(integer, integer)
ilist = a*
ilist2 = ilist*
predicates
break_(ilist,ilist2)
quantity_(ilist,integer)
even_(ilist,ilist2)
max_(ilist,a,ilist)
min_(ilist,a,ilist)
goal  
break_([a(0,54),a(1,54),a(2,54),a(3,54),a(4,54),a(5,54),a(6,54)],T).  
clauses
break_(C,T):-quantity_(C,K),K mod 2 = 0,!,even_(C,T).
break_(C,[[A]|T]):-max_(C,A,C1),even_(C1,T).
 
quantity_([],0):-!.
quantity_([_|C],K):-quantity_(C,K1),K=K1+1.
 
even_(C,[[A,B]|T]):-max_(C,A,C1),min_(C1,B,C2),!,even_(C2,T).
even_([],[]).
 
max_([a(V1,A),a(V2,B)|X],M,[a(V2,B)|XX]):-A>B,!,max_([a(V1,A)|X],M,XX).
max_([A,B|X],M,[A|XX]):-max_([B|X],M,XX).  
max_([A],A,[]).
 
min_([a(V1,A),a(V2,B)|X],M,[a(V2,B)|XX]):-A<B,!,min_([a(V1,A)|X],M,XX).
min_([A,B|X],M,[A|XX]):-min_([B|X],M,XX).
min_([A],A,[]).
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Sergmix Prolog 13 23.09.2014 09:37
Задача VBA bucha20 Задания за деньги 0 25.05.2013 17:26
Задача ExTReM13 Задания за деньги 2 07.10.2012 18:06
задача по С++ nemesises Вопросы начинающих программистов 0 01.11.2011 16:21
Помогите, задача по прологу, срочно...задача с высказываниями 4ixOn Prolog 6 10.07.2011 23:29
Помогите, задача по прологу, срочно...задача о станках 4ixOn Prolog 3 09.07.2011 22:48
Задача по MPI 45$ Naikon1988 Задания за деньги 2 22.12.2010 18:12
Д/Р Задача на C++ Tanzilit Задания за деньги 3 05.01.2009 15:07
HELP! Задача alex3820 Prolog 6 19.07.2008 02:37
Задача ,,,&#39;..&#39;,,, Prolog 7 29.04.2008 18:09
Задача D-Za Visual Basic 0 19.04.2007 13:51
А,В,С- задача про них!! Anonymous Вопросы начинающих программистов 0 08.01.2004 22:22



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов