所以这是一个货币系统,用 8 种不同价值的硬币计算出最少的硬币数量。例如:1 美分、2 美分、4 美分、33 美分等……其中一枚硬币的价值必须为“5”。所以这个程序试图确定其他 7 个硬币值必须具有哪些其他单个值,以及每个值有多少个硬币,总和在 1 到 99 美分之间。
所以我的问题是,有没有一种方法可以编写一段代码而无需手动将“5”插入程序(例如:Values = [_, _, _, _, 5, _, _, _] 或值 = [ _, 5, _, _, _, _, _, _] )?所以这里应该有不止一种解决方案......
这是代码:
questionSix(Values, Coins) :-
init_vars(Values, Coins),
coin_cons(Values, Coins, Pockets),
clever_cons(Values, Coins),
Min #= sum(Coins),
minimize((labeling(Values), labeling(Coins), check(Pockets)), Min).
init_vars(Values, Coins) :-
length(Values, 8),
Values = [_, _, _, 5, _, _, _, _],
Values :: 1..99,
increasing(Values),
length(Coins, 8),
Coins :: 0..99.
increasing(List) :-
( fromto(List, [This, Next | Rest], [Next | Rest], [_])
do
This #< Next
).
clever_cons(Values, Coins) :-
( fromto(Values, [V1 | NV], NV, []),
fromto(Coins, [N1 | NN], NN, [])
do
( NV = [V2 | _]
-> N1*V1 #< V2;
N1*V1 #< 100
)
).
任何帮助表示赞赏。谢谢!