所以这是一个计算最少携带硬币数量的货币问题。有 4 种不同种类的硬币(1 美分、5 美分、10 美分和 25 美分)。所以当我运行程序时,结果给了我这个:
?- questionFour(Coins, X).
Coins = [4, 1, 2, 3]
X = 10
Yes (0.03s cpu)
Found a solution with cost 10
Found no solution with cost 4.0 .. 9.0
指令称:“我们希望在口袋中携带尽可能少的硬币,但我们也希望确保这些硬币能够满足从 1 到 99 美分的任何金额的要求。” 所以,当我计算总数时,结果是 104 美分。我怎样才能使总金额在 1 到 99 美分之间?我不确定我所做的是否正确,或者我需要为此添加更多代码...
questionFour(Coins, Min) :-
initiatingcoinsquestionFour(Values, Coins),
coin_cons(Values, Coins, Pockets),
Min #= sum(Coins),
minimize((labeling(Coins), check(Pockets)), Min).
initiatingcoinsquestionFour(Values, Coins) :-
Values = [1, 5, 10, 25],
length(Coins, 4),
Coins :: 0..99.
coin_cons(Values, Coins, Pockets) :-
( for(Price, 1, 99),
foreach(CoinsforPrice, Pockets),
param(Coins, Values)
do
price_cons(Price, Coins, Values, CoinsforPrice)
).
price_cons(Price, Coins, Values, CoinsforPrice) :-
( foreach(V, Values), foreach(C, CoinsforPrice), foreach(Coin, Coins),
foreach(Prod, ProdList)
do
Prod = V*C,
0 #=< C,
C #=< Coin
),
Price #= sum(ProdList).
check(Pockets) :-
( foreach(CoinsforPrice, Pockets)
do
once(labeling(CoinsforPrice))
).
我不确定我所做的是否正确,但我想听听您对此的看法……谢谢!