三个数字的组合总计为1000

Mic*_*ber 2 python algorithm

我需要三个正整数的每个组合,总和为1000.

这是我的尝试,但我不确定这是否正确,因为我无法验证它.

def getSum():
    l = []
    for x in range(1, 999):
        total = 1000-x
        for y in range(1, 999):
            total = total-y
            if total>0:
                l.append([x, y, total])
    return l

print len(getSum())
Run Code Online (Sandbox Code Playgroud)

我得到了28776种不同的组合.那是对的吗?

Roc*_* Li 6

由于1+998+11+1+998一样的东西,也有组合的一些不可思议的量:

这一行可以生成所有:

[(i, 1000-i-k, k) for i in range(1,999) for k in range(1,1000-i)]
Run Code Online (Sandbox Code Playgroud)

结果:

[...
(1, 4, 995),
(1, 3, 996),
(1, 2, 997),
(1, 1, 998),
(2, 997, 1),
(2, 996, 2),
...]
Run Code Online (Sandbox Code Playgroud)

这个清单的长度是:

498501
Run Code Online (Sandbox Code Playgroud)

  • 或者,使用itertools:`[(a,ba,1000-b)for a,b in itertools.combinations(range(1000),2)]`.如果您想要具有更多元素的分区,则更容易理解. (2认同)