如果您需要用不同的硬币支付一定数量的钱,那么计算支付数量的确切硬币数量很简单,则可以使用以下方法:
for i, j in zip(coins, needed):
if amount >= 2*i:
j = amount // i
amount = amount - j * i
print (i ," : ", j)
这行得通,如果我需要支付98美元,并且我有50、10、5和1个硬币。
但是,如果我需要支付98,但是我没有100、50、20个硬币怎么办? (最佳解决方案是给出100,并损失2) 有没有简单的柏拉图式解决方法?还是我需要计算所有不同的变化,并寻找最小的损失?
答案 0 :(得分:0)
@ h4z3谢谢
一种有效的解决方案是,如果有人知道一个较短/更好的版本,谢谢
d_amount = amount
x=0
while True:
served_coins = []
served_units = []
for i, j in zip(coins, needed):
if d_amount >= i:
j = d_amount // i
d_amount = d_amount - j * i
served_coins.append(i)
served_units.append(j)
#print d_amount
if (d_amount == 0):
break
else:
x = x + 1
d_amount = amount + x