如何使用Python中的集合解决精确找零问题?
问题描述
给定无限量的10美元、20美元、50美元纸币,需完成以下操作:
- 判断输入金额是否能被精确凑出:若金额无法被10整除,输出
Not Possible - 若可以凑出,输出所有可能的纸币组合,格式为「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
相关产品推荐
相关产品推荐

