Снова с программой лото
Раньше у меня была проблема с небольшой программой лотереи, которая вычисляет все возможные комбинации за 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" Любая идея, почему?
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>";
В качестве бонуса вам больше не нужно проверять, все ли значения разные
Класс PEAR Combinatorics делает все это для вас: http://pear.php.net/package/Math_Combinatorics/docs/latest/Combinatorics/_Math_Combinatorics-1.0.0---Combinatorics.php.html
Вы получили неопределенную переменную t ошибки, так как использовали непосредственно $t=$t+1. Но вы нигде не инициализировали $t. Все остальные переменные были инициализированы.