Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kombinacje danego ciągu liczb
Forum PHP.pl > Forum > PHP
maciek_3000
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
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);
dtb
  1. <?php
  2. function kombinacje($arr, &$kombinacje, $next='') {
  3.  if (strlen($next) == count($arr)) {
  4. $kombinacje[] = $next;
  5.  } else {
  6. $n2 = str_split($next);
  7. foreach ($arr as $a) {
  8.  if (!in_array($a, $n2)) {
  9. kombinacje($arr, $kombinacje, $next.$a);
  10.  }
  11. }
  12.  }
  13. }
  14.  
  15.  
  16. kombinacje(array(1,2,3), $kombinacje);
  17. print_r($kombinacje);
  18. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.