You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写ATM最小钞票张数计算程序10、1美元面值计算异常如何解决

问题根源

你现有的代码存在两个核心逻辑错误:

  1. 所有面值的张数计算都基于原始取款总额,没有扣除已经用更大面值凑出的金额,导致小面值计算重复统计
  2. 用%2校验是否使用当前面值的逻辑没有合理性,仅巧合适配了100、50、25面值的部分场景,完全不适用于10、5、1面值的计算

修复方案

要得到最小张数的钞票组合,直接使用贪心算法即可:按面值从大到小的顺序,依次计算当前剩余金额最多可使用的当前面值张数,扣除对应金额后再处理下一个更小的面值即可。

修复后的代码如下:

print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
# 按面值从大到小排序
denominations = [100, 50, 25, 10, 5, 1]
result = []
remain = amnt

for d in denominations:
    count = remain // d
    if count > 0:
        # 处理单复数显示
        if count == 1:
            result.append(f"{count} ${d} Bill")
        else:
            result.append(f"{count} ${d} Bills")
    # 扣除已凑的金额
    remain = remain % d

# 拼接输出
print(", ".join(result))

验证效果

输入258时,程序运行过程:

  • 258//100=2张,剩余58
  • 58//50=1张,剩余8
  • 8//25=0,跳过
  • 8//10=0,跳过
  • 8//5=1张,剩余3
  • 3//1=3张,剩余0
    最终输出:2 $100 Bills, 1 $50 Bill, 1 $5 Bill, 3 $1 Bills,完全符合预期。

内容的提问来源于stack exchange,提问作者Michel Hijazin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:36:02