有没有人知道如何找出给定数字的可能性结果的数量

时间:2014-06-13 12:39:28

标签: php loops

我希望通过用户给出给定数字的位置对系统进行编码,然后脚本将计算出使用该数字一直到1的组合总数。

所以如果数字为10,则需要找到10个数字,9个数字,8个数字的所有组合,依此类推![/ p>

所以说如果数字是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个数字,但是它有很多编码,必须有一个更简单的方法:)

希望这有道理:) 任何帮助/指示都会非常感激

由于

1 个答案:

答案 0 :(得分:1)

如果您只想知道有多少组合(无论组合中元素的顺序如何),请使用以下公式:

n!/(k!(n-k)!)其中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);
        }
    }
}