2016-11-22 144 views
1

我假設有兩個地方:-,-。這些地方都有最大限制。如first place has max limit32nd place has max limit7獲取所有可能的排列組合和給定最小和最大數

我有其他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

作爲第一個嘗試,你應該坐下來用鉛筆和紙,並制定出了幾個樣本值的解決方案。提示:將其繪製爲第一個數字作爲行,第二個作爲列的表格,並觀察解決方案的形狀。 – biziclop

回答

0

讓我們假設:

1)的地方由給定的,B座標 2)你有一個TOTALMIN(m)和一個TOTALMAX(M) 3)規則是A,B,並且A + B應該> = m並且< = M 4)值的數量由等式Mm給出。 (例如,如果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

我希望這可以幫助現在,但如果你願意,我可以提供更多的'profissional'公式。該語言可能是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) 
+0

你能否給我一個僞代碼 – Jagrati

+0

當然,我可以用python編寫代碼,但是因爲我目前在工作,所以我將無法測試它。給我一分鐘 –

+0

謝謝,它會沒事的。 – Jagrati

相關問題