CS50 pset6 // cash.py // 未显示所需的适当数量的硬币

问题描述

我一直在尝试解决这个问题,但在任务中,对于 pset6,它说您需要使用一些值测试您编写的代码,它适用于其中一些,但对于其余的,它不起作用我不知道为什么。

所以下图是我需要尝试的值,我编写的代码适用于前 3 个输入,但在 0.15 之后,像 1.60、23 和 4.2 这样的值不起作用我不知道为什么

from cs50 import get_float

coin_count =0
change = get_float("Enter Change Amount: ")
total_amount = round(change * 100);
coin_amounts = [25,10,5,1]

while change<=0:
    change = get_float("Enter Change Amount: ")

while total_amount > 0:
    for i in coin_amounts:
        if total_amount >=i:
            total_amount  -= i
            coin_count+=1

print(str(coin_count) + " coins");

解决方法

完成逻辑。

假设您从 1.6 (160) 开始。

160 > 25 所以删除 25

135 > 10 所以删除 10

125 > 5 所以删除 5

120 > 1 所以删除 1

119 > 25 所以删除 25

看到问题了吗?

当你得到更大的数字时,先是 10,然后是 5,然后是 25,然后是 10,这意味着你出轨了——那些 [10 10 5] 可能是一个 25。 您需要尽可能多地删除 25 秒,然后删除所有可以删除的 10 秒,然后所有 5 秒和剩下的必须是 1 秒。