2014-06-13 28 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

相关问题