使用python计算最小硬币兑换量的问题
我有一个家庭作业,我们必须写一个程序,用最少的硬币数输出自动售货机所给的零钱。例如,3.67英镑可按1x英镑2+1x英镑1+1x50p+1x10p+1x5p+1x2p的形式分配 然而,我的程序输出了错误的数字。我知道可能会有舍入问题,但我认为当前的问题与我的编码方法有关使用python计算最小硬币兑换量的问题,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我有一个家庭作业,我们必须写一个程序,用最少的硬币数输出自动售货机所给的零钱。例如,3.67英镑可按1x英镑2+1x英镑1+1x50p+1x10p+1x5p+1x2p的形式分配 然而,我的程序输出了错误的数字。我知道可能会有舍入问题,但我认为当前的问题与我的编码方法有关 change=float(input("Input change")) twocount=0 onecount=0 halfcount=0 pttwocount=0 ptonecount=0 while change!=0:
change=float(input("Input change"))
twocount=0
onecount=0
halfcount=0
pttwocount=0
ptonecount=0
while change!=0:
if change-2>-1:
change=change-2
twocount+=1
else:
if change-1>-1:
change=change-1
onecount+=1
else:
if change-0.5>-1:
change=change-0.5
halfcount+=1
else:
if change-0.2>-1:
change=change-0.2
pttwocount+=1
else:
if change-0.1>-1:
change=change-0.1
ptonecount+=1
else:
break
print(twocount,onecount,halfcount,pttwocount,ptonecount)
结果:
Input: 2.3
Output: 11010
i.e. 3.2
Input: 3.2
Output:20010
i.e. 4.2
Input: 2
Output: 10001
i.e. 2.1
问题在于它如何使用
if/else
语句计算更改。如果您遍历第一个示例change-2>-1
将注册为true,然后结果将为.3
,但在下一个循环中如果change-1>-1
您希望为false,但实际上不是-0.7
。最好的方法之一是使用Python的floor/
和mod%
操作符。你必须对一些计算进行四舍五入
但考虑到它产生的投入
Input: 2.3
Output: 1 0 0 1 1
Input: 3.2
Output:1 1 0 1 0
Input: 2
Output: 1 0 0 0 0
您所有的比较都使用>-1,所以只要您的余额超过-1,您就会给出更改 如果您只处理整数,这是正确的,因为这里的>-1等于>=0 然而,对于浮点数,我们有例如-0.5>-1,所以我们将给出负平衡的变化(我们不想要)
因此,正确的方法是将所有>-1比较替换为>=0(大于或等于0)比较。谢谢,这似乎很有帮助!然而,答案仍然是错误的-我猜是一个取整的事情?可能是的。一种更一致的方法是将输入乘以100并转换为int,换句话说,只处理便士的余额,这样就可以避开那些讨厌的浮点问题。
Input: 2.3
Output: 1 0 0 1 1
Input: 3.2
Output:1 1 0 1 0
Input: 2
Output: 1 0 0 0 0