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

如何使用Python中的集合解决精确找零问题?

问题描述

给定无限量的10美元、20美元、50美元纸币,需完成以下操作:

  1. 判断输入金额是否能被精确凑出:若金额无法被10整除,输出Not Possible
  2. 若可以凑出,输出所有可能的纸币组合,格式为「10美元张数20美元张数50美元张数」(例如输入50美元,有效组合为500、310、120、001)

示例输入:50
正确输出:
500
310
120
001

原代码问题分析

原代码存在多处逻辑错误,无法实现需求:

  • 直接通过amt/面额计算张数,仅得到「全部使用该面额」的单一情况,未遍历所有可能的组合
  • 判断条件n_10*10+n_20*20+n_50*50==3*amt无意义,该等式恒成立,无法筛选有效组合
  • 集合的使用逻辑错误,无法收集所有符合要求的纸币组合
正确代码实现
amt = int(input())
if amt % 10 != 0:
    print("Not Possible")
else:
    # 遍历所有可能的50美元张数
    max_50 = amt // 50
    combinations = []
    for count_50 in range(max_50 + 1):
        remaining_after_50 = amt - count_50 * 50
        # 遍历所有可能的20美元张数
        max_20 = remaining_after_50 // 20
        for count_20 in range(max_20 + 1):
            remaining_after_20 = remaining_after_50 - count_20 * 20
            # 剩余金额必须是10的倍数,计算10美元张数
            count_10 = remaining_after_20 // 10
            # 按格式拼接组合字符串
            combinations.append(f"{count_10}{count_20}{count_50}")
    # 输出所有组合
    for combo in combinations:
        print(combo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:35:11