繁体   English   中英

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

[英]How can I find which combinations of a set of numbers will sum to three numbers?

我什至不知道把它带到哪里去——Python? Excel? 只是谷歌它? (FWIW,我的数字正在组成一个 Excel 表格。我一直在尝试选择一些并猜测它,但没有 bueno。)

我有这些数字:

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)。 对于这些组合数量中的每一个,我都会得到数字组合并查看总数是否加起来。

如果您的列表变大,这可能会变得非常慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM