Python指定硬币找零:最小硬币数计算及错误修复问询
解决50分/1€/2€硬币找零的数量计算错误问题
问题场景
需求:实现分销商找零功能,仅允许使用50分(50)、1€(100分)、2€(200分)硬币。已正确计算找零金额(如商品售价5€,客户支付10€,应找零5€即500分),但输出的硬币组成数量错误。
核心问题分析
这类找零错误大多是因为硬币面额计算顺序错误导致的。由于50分、1€、2€是倍数递减的关系(200是100的2倍,100是50的2倍),贪心算法完全适用——优先用最大面额硬币,能得到正确且最优的硬币组合。如果从最小面额开始计算,会得到不符合预期的数量结果。
正确实现代码示例(以Python为例)
# 先将找零金额统一转换为分(避免浮点精度问题) change_in_cents = 500 # 对应5€找零 # 从最大面额开始计算 two_euro_coins = change_in_cents // 200 remaining = change_in_cents % 200 one_euro_coins = remaining // 100 remaining = remaining % 100 fifty_cents_coins = remaining // 50 # 输出结果 print(f"找零组成:{two_euro_coins}个2€,{one_euro_coins}个1€,{fifty_cents_coins}个50分")
运行结果
针对5€找零,输出为:
找零组成:2个2€,1个1€,0个50分
这个结果符合预期(2×2€ + 1×1€ = 5€)。
关键注意点
- 务必先计算最大面额的硬币数量,再依次处理更小面额,这是保证结果正确的核心。
- 统一用分作为计算单位,避免使用欧元浮点值带来的精度误差(比如0.5+1+2这类计算可能出现小数精度问题)。
内容的提问来源于stack exchange,提问作者Eloi Jahan
相关产品推荐
相关产品推荐

