我有下一个问题:有四个列表。第一个列表包含一个或多个表的代码。第二个列表包含数字,表示每个表上的苹果数。第三个列表包含一个或多个子名称,第四个列表包含每个孩子将接收多少个苹果。
例如:[a],[3],[c,d],[2,1]
; a
是表格的代码,3
是其上的苹果数量。 c
和d
是孩子的名字,而2
和1
分别是c
收到的d
个。
找出每个孩子从任何桌子上接收苹果的可能方式。
对于示例1,我给出了唯一可能的解决方案:子c
将从a
获取两个苹果,而子d
将获得一个。
输出应该是这样的:[[a,c,2],[a,d,1]]
。
桌子和儿童的数量没有限制,桌子上总会有儿童需要的苹果数量。
我知道我必须提供一些代码,但我真的不知道如何开始。关于如何开始的一些提示将不胜感激。
答案 0 :(得分:1)
首先,尝试提供单个请求。可以像
一样简单update([K|Ks],[V|Vs],N,[U|Us],[take(T,K)|TKs]) :-
N > 0,
T is min(N,V),
M is N-T,
U is V-T,
update(Ks, Vs, M, Us, TKs).
/*update([_|Ks],[_|Vs],N,Us,TKs) :-
N > 0,
update(Ks, Vs, N, Us, TKs).*/
update(_,Vs,N,Vs,[]) :-
N =< 0.
也就是说,在请求N
个苹果的情况下,尽可能从表K
中取出U
个苹果。
取消注释2 ^子句会回答一个稍微不同的问题:而不是Find out a possible way...
会显示Find out all possible ways...
然后尝试适用于所有孩子......