Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak zwrócić wszystkie kombinacje rozłożenia X osób w Y grupach
radiopraca
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 7.02.2014

Ostrzeżenie: (0%)
-----


Witam serdecznie,

Siedzę od kilku godzin na pewnym skryptem, ale bez skutecznie więc postanowiłem poprosić o pomoc ekspertów.

Chciałbym napisać funkcję która zwróci mi wszystkie możliwe kombinacje rozłożenia X osób w Y grupach.
Funkcja musiałaby być uniwersalna i obsługiwać dowolne wartości X i Y.

Na przykład: 3 osoby można rozłożyć w 2 grupach na 8 sposobów:
0, 123 (0 osób w pierwszej grupie, osoby: 1, 2 i 3 w drugiej grupie)
1,23 (Osoba: 1 w pierwszej grupie, osoby 2 i 3 w drugiej grupie)
2,13
3,12
12,3
13,2
23,1
123,0

(...)

Kodu właśnie nie mam jeszcze bo nie wiem jak się za to zabrać.
Myślałem coś o rekurencji, ale nie mam pojęcia jak zacząć.
Nie proszę o gotowe rozwiązanie, tylko o jakieś naprowadzenie jak to zrobić.

Wszystkich kombinacji jest: pow(Y, X) czyli Y do potęgi X.

Ten post edytował Kshyhoo 7.02.2014, 20:40:25
Powód edycji: [Kshyhoo]: to Forum nie stosuje takich metod
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




A tak:
  1. function kombinacje($tekst, $k) {
  2. for ($i=0;$i<$k;$i++) $t[$i]=$i;
  3. $t[$k-1]--;
  4. do {
  5. if ($t[$k-1]>=strlen($tekst)-1) {
  6. for ($j=0;$j<$k;$j++) {
  7. if ($t[$j]>=strlen($tekst)-$k+$j) {$t[$j-1]++; $t[$j]=$t[$j-1];}
  8. }
  9. }
  10. $t[$k-1]++;
  11. $kombinacja="";
  12. for ($j=0;$j<$k;$j++) $kombinacja.= $tekst[$t[$j]];
  13. $tmp[]=$kombinacja;
  14. } while ($t[0]<>strlen($tekst)-$k);
  15. echo $l;
  16. return $tmp;
  17. }
  18.  
  19. $wynik = kombinacje("1234567890",5);
  20. $ile = count($wynik);
  21. echo "ILE: $ile<br />";
  22. for ($i=0;$i<$ile;$i++) echo $wynik[$i]."<br />";
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 19:36