kolejność permutacji się zmienia, ale jest uzależniona od użytego algorytmy, poza tym te moje listingi są posortowane malejąco, więc kolejność oryginalna jest gubiona i ciągi dla wszystkich tych trzech liczb jest jednakowa
Pytałeś jak to zrobiłem, więc zamieszczam kod permutacji2.php
Algorytm permutacji przepisałem z C++ do PHP ze strony podanej na początku w komentarzu
<?php
//http://burned.pl/cgenerowanie-permutacji-w-porzadku-leksykograficznym
function permutacja(&$data, $n)
{
if ($n < 2)
return;
$i = $n - 1;
while (($i > 0) && ($data[$i - 1] >= $data[$i]))
$i--;
if ($i > 0) {
$j = $n;
while (($j > 0) &&($data[$j - 1] <= $data[$i - 1]))
$j--;
}
if (($i > 0) && ($j > 0)) {
$a = $data[$j-1];
$data[$j-1] = $data[$i-1];
$data[$i-1] = $a;
}
for ($i++, $j = $n; $i < $j; $i++, $j--) {
$a = $data[$j-1];
$data[$j-1] = $data[$i-1];
$data[$i-1] = $a;
}
}
function silnia($i)
{
if($i <= 1)
return 1;
return $i*silnia($i-1);
}
$data = array(2,0,1,1, 1, 0, 1,8);
$n = count($data);
$data2 = array();
for($k = 0; $k < $n; $k++)
{
$perm = silnia($n);
for($i=0; $i<$perm; $i++)
{
permutacja($data, $n);
$temp = $data;
for($j=$n-$k; $j < $n; $j++)
unset($temp[$j]);
$text = implode("", $temp);
$text = sprintf("%d", intval($text));
if(strlen($text) != 6)
continue;
if(isset($data2[$text]))
{
continue;
}
$data2[$text] = 1;
}
}
$data2 = array_keys($data2);
arsort($data2);
echo "<ol>\n";
foreach($data2 as $text)
echo "\t<li>$text</li>\n";
echo "</ol>";
?>