【发布时间】:2012-10-04 19:11:17
【问题描述】:
我之前在一个小型彩票程序上遇到了一个问题,该程序可以计算 6/49 的所有可能组合(使用 PHP)。
这是我目前的问题。我使用条件,所以数字不会重复,但在下一个循环中,当第一个数字改变时,我有一个重复的组合。让我通过一个例子来解释:
我有这个组合:
1 2 3 4
1 2 3 5
1 2 3 6
...
1 2 4 3
1 2 4 5
1 2 4 6
所以我的彩票1 2 3 4和1 2 4 3是一样的。
有任何解决方法的想法吗?我什么都想不出来……
这是代码(我只到 4/49 :D)
<?php
for ($i=1 ; $i<50 ; $i++)
{
$a=$i;
for ($j=1 ; $j<50 ; $j++)
{
if ($i!=$j)
{
$b=$j;
for ($k=1 ; $k<50 ; $k++)
{
if ($k!=$j && $k!=$i)
{
$c=$k;
for ($l=1 ; $l<50 ; $l++)
{
if ($l!=$i && $l!=$j && $l!=$k)
{
$d=$l;
echo "$a $b $c $d <br>";
}
}
}
}
}
}
}
?>
<br/><br/>
谢谢!
更新:
代码如下所示:
< ?php
for($a=1; $a<50; $a++)
{
for($b=$a+1; $b<50; $b++)
{
for($c=$b+1; $c<50; $c++)
{
for($d=$c+1; $d<50; $d++)
{
for($e=$d+1; $e<50; $e++)
{
for($f=$e+1; $f<50; $f++)
{
$t=$t+1;
}
}
}
}
}
}
echo "$t";
?>
我确实得到了正确的答案,但我也得到了这个错误:“未定义的变量:t” 知道为什么吗?
【问题讨论】:
-
所以本质上您是在寻找 6 位字符串中数字 1 - 49 的所有唯一排列?
-
我不明白你的程序应该做什么,以及你想要实现什么。
-
不,他想忽略已打印的票号的任何排列。您可以对它们进行排序并将它们存储在一个数组中,然后进行查找,如果您已经拥有该组合 (
$a = array($a, $b, $c, $d); sort($a); $combinations[$a[0]][$a[1]][$a[2]][$a[3]] = true;),但可能有更优雅的解决方案。 -
是的 BenM。 @AndreKR:谢谢!我会试试的