我希望通过用户给出给定数字的位置对系统进行编码,然后脚本将计算出使用该数字一直到1的组合总数。
所以如果数字为10,则需要找到10个数字,9个数字,8个数字的所有组合,依此类推![/ p>
所以说如果数字是3
然后你有
如果nuber是4
然后你会有
依旧......
我不需要不同的订单组合只是组合本身而且数字可能是任何东西,但它不可能超过10
有没有人知道一种编码方式,所以任何给定的nubmer它都会产生组合?
目前我已经硬编码了5个数字,但是它有很多编码,必须有一个更简单的方法:)
希望这有道理:) 任何帮助/指示都会非常感激
由于
答案 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);
}
}
}