Просто убедитесь, что вы не используете больше, чем у вас есть:
number_of_coins = min(numbers_of_denominations[i], int((change / denominations[i])))
Это даст вам min(1, 2)
за 2 доллара, что позволит вам использовать только один , что у вас есть:
5 x 1
2 x 1
0.5 x 4
0.2 x 1
0.1 x 1
0.05 x 1
0.02 x 2
Просто следите, если у вас недостаточно монет для полной суммы, это, вероятно, приведет к ошибке выхода за границы без дальнейших изменений:
denominations = [5, 2, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
numbers_of_denominations = [2, 1, 10, 10, 20, 10, 20, 50]
change = 100
i = 0
while(change > 0):
# Check if we've run out of money.
if i >= len(denominations):
print("No change left, need", change)
break;
if(change >= denominations[i]):
number_of_coins = min(numbers_of_denominations[i], int((change / denominations[i])))
change = round(change - denominations[i] * number_of_coins, 2)
print(denominations[i], "x", number_of_coins)
i += 1
Это показывает:
5 x 2
2 x 1
0.5 x 10
0.2 x 10
0.1 x 20
0.05 x 10
0.02 x 20
0.01 x 50
No change left, need 77.6