我有以下代码,它打印给定数字的所有组合。当$numbers
包含两个相等的数字时,它会返回致命错误。
我收到以下错误:
Fatal error: Maximum execution time of 30 seconds exceeded in
C:/Apache24/htdocs/index.php on line 18
我的代码:
<?php
$numbers = array("2","1","4");
$numberofelements = count($numbers);
$factorial = 1;
for ($i=1; $i<=$numberofelements; $i++)
{
$factorial *= $i;
}
$quantitycombinations = $factorial;
$numbersdrawn = array();
while(true)
{
$exists = false;
$numberdrawn1 = "";
shuffle($numbers);
$numberdrawn1 = implode("", $numbers);
strval($numberdrawn1);
foreach ($numbersdrawn as $value) {
if(strval($value)==$numberdrawn1)
{
$exists = true;
}
}
if(!$exists){
array_push($numbersdrawn, $numberdrawn1);
if(count($numbersdrawn)==$quantitycombinations)
{
foreach($numbersdrawn as $item)
{
echo $item."<br>";
}
break;
}
}
}
?>
答案 0 :(得分:0)
while
循环不会停止,直到$numbersdrawn
中的组合数等于$factorial
。但是当存在重复时,没有那么多不同的组合,因为有些组合彼此相同。
E.g。如果数字是1,2,3,则组合是123,132,213,231,312,321。
但如果数字为1,2,2,则组合仅为122,212,221。
您需要将$factorial
除以重复元素的数量才能获得$quantitycombinations
。