python 给定一个正整数a和一个包含任意个正整数的 列表 b,求所有<=a 的加法组合

发布于 2022-09-04 17:52:31 字数 199 浏览 15 评论 0

例如,10,[1,2,3]

输出类似:
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
2 + 2 + 2 +2 + 2
3 + 3 + 3 + 2
3 + 2 + 2 + 2 + 1

注意:是小于等于,list 内的正整数有可能并不能正好等于 a.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

血之狂魔 2022-09-11 17:52:31

通过itertools.combinations_with_replacement我们写短一点的代码:

def solve2(lst, bound):
    max_length = bound // min(lst)
    for n in range(1, max_length+1):
        for c in itertools.combinations_with_replacement(lst,n):
            if sum(c) <= bound:
                print('+'.join(map(str, c)))
            
solve2([1,2,3], 10)
爱的十字路口 2022-09-11 17:52:31

假設該問題符合下列假設:

  1. 列表內元素可重複使用

  2. 只要是能滿足小於等於上限值的組合都可接受, 就算遠小於上限值甚至是零也可以

以下是暴力法:

# code for python3

from itertools import combinations

def solve(lst, upperbound):
    candidates = []
    for n in lst:
        for count in range(upperbound//n):
            candidates.append(n)
    allcomb = set()
    for l in range(1, len(candidates)+1):
        for comb in combinations(candidates, l):
            if not comb in allcomb:
                allcomb.add(comb)
                if sum(comb) <= upperbound:
                    print('+'.join([str(n)for n in comb]))
        
solve([1,2,3], 10)

我回答過的問題: Python-QA

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文