2

私は以前、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」何かアイデアはなぜですか?

4

3 に答える 3

9

すべての組み合わせを取得するには、内部ループ変数値を親ループ変数値+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>";

ボーナスとして、値がすべて異なるかどうかをテストする必要はもうありません

于 2012-10-14T18:20:01.467 に答える
0

PEAR Combinatoricsクラスはこれをすべて行います:http://pear.php.net/package/Math_Combinatorics/docs/latest/Combinatorics/_Math_Combinatorics-1.0.0---Combinatorics.php.html

于 2013-01-09T15:45:44.173 に答える
0

$t=$t+1 を直接使用していたため、エラー undefined variable t が発生しました。しかし、$t をどこにも初期化していません。他のすべての変数は初期化されています。

于 2012-10-15T14:10:10.210 に答える