我如何找到一组数字的哪些组合和为三个数字?



我甚至不知道从哪里开始- Python?Excel ?谷歌一下?(顺便说一句,我的数字组成了一个Excel表格。我一直在试着选择一些并猜测它,但是没有好运。

我有这些数字:

826, 583, 212, 976, 385, 198, 662, 133, 212, 583, 211, 519

我想弄清楚要把哪些集合放在一起才能得到这些数字:

1047, 2453, 2000

(两组加起来是5500)。

有什么想法吗?

试试这个

from itertools import chain, combinations
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

for p in powerset([826, 583, 212, 976, 385, 198, 662, 133, 212, 583, 211, 519]):
if sum(p) in [1047, 2453, 2000]:
print(p)

输出
(385, 662)
(826, 976, 198)
(583, 212, 198, 662, 133, 212)
(212, 198, 662, 133, 212, 583)
(583, 212, 133, 212, 583, 211, 519)
(583, 212, 385, 198, 133, 212, 211, 519)
(212, 385, 198, 133, 212, 583, 211, 519)

尝试了类似的操作:

from itertools import combinations, islice
a = [826, 583, 212, 976, 385, 198, 662, 133, 212, 583, 211, 519]
for combo in range(2, len(a)+1):
c = combinations(a, combo)
for i in c:
tot = sum(islice(i, combo))
if tot in [1047, 2000, 2453]:
print(f"Sum of {i} is {tot}")

它返回:

Sum of (385, 662) is 1047
Sum of (826, 976, 198) is 2000
Sum of (583, 212, 198, 662, 133, 212) is 2000
Sum of (212, 198, 662, 133, 212, 583) is 2000
Sum of (583, 212, 133, 212, 583, 211, 519) is 2453
Sum of (583, 212, 385, 198, 133, 212, 211, 519) is 2453
Sum of (212, 385, 198, 133, 212, 583, 211, 519) is 2453

我首先遍历我们可以拥有的不同数量的组合- 2直到len(list)。对于这些组合中的每一个,我将得到数字的组合,并查看总数是否相加。

如果你的列表很大,这可能会变得很慢。