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

如何获取输出结果的总行数?求协助修改凑1美元组合的Python代码以输出总组合数量

解决硬币组合计数问题

嘿,你的递归思路挺清晰的,不过代码里有两个小细节得修正下,之后就能轻松加上组合总数统计的功能啦!

先修正代码里的小问题

  1. 递归调用时误用到了全局变量n,应该用函数参数s才对
  2. coins_free [1:]里多了个空格,这会导致语法错误哦

加上统计功能的完整代码

修改后的代码不仅能正常输出所有凑币组合,还会在最后打印出总数量:

def alter(s, coins_free, coins_in_use):
    if sum(coins_in_use) == s:
        yield coins_in_use
    elif sum(coins_in_use) > s:
        pass
    elif coins_free == []:
        pass
    else:
        # 修正:把n换成s,去掉多余空格
        for c in alter(s, coins_free[:], coins_in_use + [coins_free[0]]):
            yield c
        for c in alter(s, coins_free[1:], coins_in_use):
            yield c

n = 100
coins = [1, 5, 10, 25, 100]
solution = [s for s in alter(n, coins, [])]

# 打印所有符合条件的组合
for s in solution:
    print(s)

# 打印组合总数量
print(f"\n总共有 {len(solution)} 种不同的组合")

补充小技巧

如果处理更大金额时想节省内存,也可以不用把所有组合存进列表,直接在遍历的时候计数:

count = 0
for s in alter(n, coins, []):
    print(s)
    count += 1
print(f"\n总共有 {count} 种不同的组合")

这种方式不会占用额外内存存储所有组合,效率会更高一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:48:13