Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 又是乐透计划_Php_Variables_For Loop - Fatal编程技术网

Php 又是乐透计划

Php 又是乐透计划,php,variables,for-loop,Php,Variables,For Loop,我以前在一个小型彩票程序中遇到了一个问题,该程序计算了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 所以我的彩票1234和1243是一样的 你知道怎么解决吗?我想不出什么 这是代码(我只做了4/49:D) 谢谢 更新: 代码如下所示: < ?php

我以前在一个小型彩票程序中遇到了一个问题,该程序计算了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
所以我的彩票
1234
1243
是一样的

你知道怎么解决吗?我想不出什么

这是代码(我只做了4/49:D)




谢谢

更新:

代码如下所示:

< ?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";

 ?>
<?php

对于($a=1;$a要获得所有组合,应该将内部循环变量值初始化为父循环变量值+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>";

用于($a=1;$a当您直接使用$t=$t+1时,您得到了未定义的错误变量t。但是您没有初始化$t。所有其他变量都已初始化。

PEAR组合数学类为您完成了所有这些:

所以本质上您是在寻找6位字符串中数字1-49的所有唯一排列?我不明白是什么你的程序应该这样做,以及你想要实现的目标。不,他想忽略已经打印的票号的任何排列。你可以将它们排序并存储在一个数组中,然后进行查找,如果你已经有了这个组合(
$a=array($a,$b,$c,$d);sort($a);$combines[$a[0][$a[1][$a[2][$a[3]]=true;
)但可能有一个更优雅的解决方案。类似这样的解决方案是的,本姆。@AndreKR:谢谢!我会尝试一下。更新后的anwser:您也可以通过更改结束条件来避免一些循环。我刚做了。不工作:)举例来说,在程序的中间,我将得到:1、2、16、44、45、1、2、16、44、46、1、1、2、^、x、等。我有点困惑我自己…我甚至不知道我说的是对还是错…IDEEA是我加了一个$t= $t+i;人们在互联网上说的e数字是中奖的可能性。我的错…当我第一次运行它时,它给了我大约1900万,或者说190万…我没有仔细阅读它。这个想法是6/49的真实概率大约是13983万,所以我知道我错了。我现在再次运行它,它给出了确切的数字13983816但是在数字之前有一个错误:未定义变量:t仍然。程序工作!:DLet me get you..你想得到从1到50的所有6位数字的可能组合吗??
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>";