【问题标题】:Again with the lotto program再次与乐透计划
【发布时间】: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 41 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:谢谢!我会试试的

标签: php variables for-loop


【解决方案1】:
【解决方案2】:

您在直接使用 $t=$t+1 时收到错误未定义变量 t。但是你没有初始化$t。所有其他变量都已初始化。

【讨论】:

    【解决方案3】:

    要获得所有组合,您应该将内部循环变量值初始化为父循环变量值 + 1 4/49 示例

    for($a=1; $a<50-3; $a++)
        for($b=$a+1; $b<50-2; $b++)
            for($c=$b+1; $c<50-1; $c++)
                for($d=$c+1; $d<50; $d++)
                    echo "$a $b $c $d<br>";
    

    作为奖励,您不再需要测试值是否都不同

    【讨论】:

    • 更新anwser:你也可以通过改变结束条件来避免一些循环
    • 对不起.. 我刚刚做到了。不工作:) 例如,假设在程序中间我会有这个:1 2 16 44 45; 1 2 16 44 46....1 2 16 44 49 ; 1 2 16 45 46 等等。
    • 我有点迷惑自己...我什至不知道我说的是对还是错...想法是我添加了一个 $t=$t+1 ;回声后,我会知道我有多少可能性,它甚至没有接近人们在互联网上说的数字是赢得彩票的可能性。
    • 我的错……当我第一次运行它时,它给了我大约 1900 万或 190 万……我没有仔细阅读。想法是 6/49 的真实概率约为 1390 万,所以我知道我错了。我现在再次运行它,它给出了确切的数字 13983816 但在数字之前有一个错误:未定义的变量:t 仍然。该程序有效! :D
    • 让我告诉你..你想得到 6 位数字的所有可能组合,从 1 到 50 对吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多