留下最少的小费
Leave minimal tip
如果你需要用不同的硬币支付一定数量的钱,计算支付金额的确切硬币数量很简单,你可以使用这样的东西:
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)
有没有一种简单的柏拉图式的方法来解决它?或者我需要计算所有不同的变化,并搜索最小损失?
@h4z3 谢谢
一个有效的解决方案是,如果有人知道预期的 shorter/better 版本,谢谢
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
如果你需要用不同的硬币支付一定数量的钱,计算支付金额的确切硬币数量很简单,你可以使用这样的东西:
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) 有没有一种简单的柏拉图式的方法来解决它?或者我需要计算所有不同的变化,并搜索最小损失?
@h4z3 谢谢
一个有效的解决方案是,如果有人知道预期的 shorter/better 版本,谢谢
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