maciek_3000
12.11.2006, 20:59:48
Witam!
Chciałbym poznać Wasze pomysły na rozwiązanie takiego zagadnienia:
mamy jakąś stałą typu integer > 0 i algorytm ma wyświetlić (ew. dodać do zmiennej) tablicę wszystkich możliwych rozmieszczeń liczb w szeregu, z tym, że liczby są 1 <= x <= stała i nie mogą się powtarzać.
Np. dla stałej 3 są to:
123
312
213
231
132
321
Mam wiele koncepcji na stworzenie tego algorytmu, np. operowanie na innym powiedzmy "systemie liczb", x/stała, czy wielokrotne powtarzanie tablicy, zakładając, że kombinacji jest mniej niż stała^2 i sprawdzając, czy się nic nie powtarza.
Może ktoś z Was rozwiązywał podobne zadanie.
Maciek
wipo
13.11.2006, 15:56:47
Kod
$liczba="123";
$kombinacje=array($liczba);
$liczby=array();
for($x=0;$x<strlen($liczba);$x++) array_push($liczby,$liczba[$x]);
for($x=0;$x<count($liczby);$x++){
for($y=0;$y<count($liczby);$y++){
if ($x!=$y){
$temp=$liczby;
$a=$temp[$x];
$temp[$x]=$temp[$y];
$temp[$y]=$a;
$liczba2=implode("",$temp);
if (!in_array($liczba2,$kombinacje)) array_push($kombinacje,$liczba2);
}
}
}
print_r($kombinacje);
<?php
function kombinacje($arr, &$kombinacje, $next='') {
$kombinacje[] = $next;
} else {
$n2 = str_split($next);
foreach ($arr as $a) {
kombinacje($arr, $kombinacje, $next.$a);
}
}
}
}
kombinacje
(array(1
,2
,3
), $kombinacje);?>