2014-06-13 25 views
-3

我期待通過給定數字由用戶給出編碼系統,然後腳本將計算出組合的總數一直使用這個數字到一個。有沒有人知道一種方法來查找給定數量的可能性結果的數量

因此,如果數字是10,它需要找到所有的10個數字,9個數字,8個數字等組合到一個!

所以說,如果數量爲3

那麼你有

  • 3號組合(1,2,3)=> 1種
  • 2號組合(1,2)(1 ,3)(2,3)=> 3個
  • 1號組合(1)(2)(3)=> 3

如果nuber是4

那麼你將有

  • 4號組合(1,2,3,4)=> 1個
  • 3號組合(1,2,3)(1,2,4)(1 ,3,4)(2,3,4)=> 4
  • 2個數字組合(1,2)(1,3)(1,4)(2,3)(2,4)(3,4) )=> 6個
  • 1號組合(1)(2)(3)(4)=> 4

等等...

我不需要不同的訂單組合,只是組合本身,再次的數字可能是任何東西,雖然它不可能超過10

沒有人知道一種方法來編碼這個,所以任何給定的nubmer它會產生組合?

目前,我已經硬編碼了5個號碼,但其編碼的很多,必須有這樣做:)

希望這是有道理:) 任何幫助/方向走的更簡單的方法woud非常感激

感謝

+0

如果是整數,則你只需從1開始計數到那個數字。就像用戶給出「10」一樣,你只需從「1」開始計數到「10」即可。如果您的「3」表示「3位數字」,這意味着您需要從「100」到「999」進行計數,「4」將表示從「1000」到「9999」的範圍。 – Deele

+0

這會給你什麼樣的組合?謝謝 – user2886669

+0

解釋一下,你是說什麼「組合」。 – Deele

回答

1

如果你只是想知道有多少組合有(不管元素的順序的組合內)使用這個公式:

N /(K! (nk)!) e n是你有多少個數字,k是每個組合有多少個數字。所以如果數字是9,你想知道有多少組合可以將這些數字成對分組。它會給你:9!/(2!(9-2)!)= 36

有所幫助: http://en.wikipedia.org/wiki/Combination

至於在PHP編碼它

$n = $_GET['number']; 

echo "Combinations for $n numbers:"; 

for ($k = 1; $k <= $n; $k++) { 
    $combinations = factorial($n)/(factorial($k)*factorial($n-$k)); 
    echo "<br>Grouped by $k:" . $combinations; 
} 


function factorial($number) { 
    if ($number == 0) return 1; 
    return $number * factorial($number - 1); 
} 

編輯: 要打印出所有的組合:

combinations(range(1, $n), $k); 

function combinations($numbers, $count, $prefix = ""){ 
    if ($count == 0) { 
     echo "<br>". $prefix; 
    } else { 
     foreach ($numbers as $number) { 
      $offset = array_search ($number , $numbers)+1; 
      combinations(array_slice($numbers, $offset), $count-1, $prefix . $number); 
     } 
    } 
} 
+0

謝謝你的回答,但我需要一種方式來返回給定數字的所有數字的獨特組合,而不僅僅是總組合。加上將計數1,2和2,1作爲單獨的組合?謝謝 – user2886669

+0

編號的順序在這裏並不重要,在@ natronite的例子中。如果你想要所有獨特的(數字的順序是重要的)組合,我將不得不指出,你的例子中的數字3有一個錯誤 - 將有6個可能的3個數字的組合,而不是1.(123)(231)( 312)(321)(213)(132) –

+0

是啊對不起,唯一我的意思是組合中的數字不是順序:)所以(123)與(231)相同,因爲它包含相同的數字,需要一次。謝謝 – user2886669

相關問題