天天看點

python求任意個連續整數的和_python 給定一個正整數a和一個包含任意個正整數的 清單 b,求所有<=a 的加法組合...

例如,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.

通過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)

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

清單內元素可重複使用

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

以下是暴力法:

# 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