获取给定最小和最大数量的所有可能的排列和组合

时间:2016-11-22 11:23:06

标签: algorithm

我假设有两个地方:-,-。这些地方中的每一个都有最大限制。例如first place has max limit 32nd place has max limit 7

我有其他2个号码totalmaxlimit,其他号码是totalminlimit

Ex; totalmaxlimit  = 6
    totalminlimit = 3

我想编写一个代码,我可以在上面两个地方填充所有可能的排列和组合,使得三个位置的总和大于等于3且小于等于6。

Example:

3 0  
3 1 
2 0 
2 1
2 4

Also,

2 6 will be wrong result because sum is greater than totalmaxlimit.
4 2 is also wrong as first place has max limit of 3. 

任何语言的代码都没问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

让我们假设:

1)这个地方由A,B坐标给出 2)你有一个总min(m)和一个totalMax(M) 3)规则是A,B和A + B应该> = m并且<= M 4)值的数量由等式M-m给出。 (例如,如果M = 10且m = 0,我们将有10个有效值。)

您可以使用公式P = n来获得排列! /(n-k)!其中N是值的数量,k是您可以拥有的有效数字。

因此,例如,如果m = 0,则M = 6:

排列=(0,6),(1,5),(2,4)等...

基本上你有(X_n,X_M)之和,当n增长时,M减小。 M = M - n

我希望这对现在有所帮助,但我可以提供更多&#39; profissional&#39;如果你喜欢的公式。语言可能是python,因为我觉得它会更容易。但首先你需要获得算法,将它传递给代码是微不足道的。

以下是代码:

def permutations(min, max):
# init variables
m = min
M = max
results = []

# main loop
for i in range(min, max):
    for j in range(min, max):
        if ((i + j) >= min and (i+j) <= max ):
            results.append([i, j])

print(results)