Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kombinacje
Forum PHP.pl > Forum > PHP
nikestylex7
Witam mam problem i nie wiem jak się za niego zabrać chciałbym napisać skrypt który będzie mi wyswietlal kombinacje czyli mamy np 4 rzędy po 3 kombinacje czyli 1 2 3 i teraz chce aby skrypt podzielił kombinqcje na ronlzne nie powtarzające się czyli np pierwszy będzie miał 1 1 1 1 drugi 1 1 1 2 trzeci 1 1 1 3 aż wszystkie kombinacje czyli trzy do potęgi czwartej zoetana wydrukowane na ekranie. Przepraszam za pisownię ale pisze przez telefon. Proszę pytać jak są jakieś niejasnosci
abort
Najzwyklejsze N pętli zagnieżdżonych coraz głębiej (patrz: matrioszki).
nikestylex7
a mógłby mi ktoś podać jakiś przykład ? Bardzo bym był wdzięczny...
styryl
  1. //deklaracja elementów tablicy
  2. $tab1[0] = 1;
  3. $tab1[1] = 2;
  4. $tab1[2] = 3;
  5. $tab1[3] = 4;
  6. $ilosc=count($tab1);
  7. //przepisanie tablicy do tablicy pomocniczej
  8. $tab2 = $tab1;
  9. for($i=0;$i<$ilosc;$i++)
  10. {
  11. $j=$i+1;
  12. while($j<$ilosc)
  13. {
  14. //wypisanie kombinacji
  15. echo $tab1[$i].','.$tab2[$j].'<br/>';
  16. $j++;
  17. }
  18. }


http://www.drzewo-wiedzy.pl/?page=artykul&...C3%B3w_tablicy_?

A tutaj twój przykład:

  1. $liczby = array( '1','2','3' );
  2. $kombinacje = array();
  3.  
  4. for( $a = 0; $a < count( $liczby ); $a++ ) {
  5. for( $b = 0; $b < count( $liczby ); $b++ ) {
  6. for( $c = 0; $c < count( $liczby ); $c++ ) {
  7. for( $d = 0; $d < count( $liczby ); $d++ ){
  8. $kombinacje[] = $liczby[$a]. $liczby[$b]. $liczby[$c]. $liczby[$d];
  9. }
  10. }
  11. }
  12. }
  13.  
  14. echo '<pre>';
  15. print_r( $kombinacje );
  16. echo '</pre>';
nikestylex7
Bardzo dziękuje. Bardzo mi pomogłeś
cudny
Ale to drzewko aż się prosi o rekurencję !
artuross
Ja zastosowałbym eval(), @up - to skoro się prosi - utwórz funkcję i pokaż przykład, bo tak nie pomogłeś w żaden sposób tongue.gif
nikestylex7
Hmm a widzę że tutaj mam już wprowadzone 4 mecze i dopiero od nich po 3 kombinacje a jak osoba by chciała wprowadzić ilość spotkań np 7 a nie na stałe jakbym chciał za pomocą jquery dodawać nowe spotkanie ?
CuteOne
Cytat(nikestylex7 @ 11.10.2012, 19:22:16 ) *
Hmm a widzę że tutaj mam już wprowadzone 4 mecze i dopiero od nich po 3 kombinacje a jak osoba by chciała wprowadzić ilość spotkań np 7 a nie na stałe jakbym chciał za pomocą jquery dodawać nowe spotkanie ?

Eeee ale o czym ty pleciesz co ma jquery do n+1 zapętleń? Najlepiej opisz swój problem w miarę szczegółowo i zapodaj trochę kodu.

@arturos ty tym bardziej nie pokogłeś sugerując eval() sleep.gif
nikestylex7
No w przykładzie widać 4 zapętlenia a b c d bo prosiłem o 4 rzędy a jak osoba by chciała wprowadzić kilka rzędów więcej a potem mniej takie sobie dodawanie w jquery to jak zmienić podany przykład tak aby był uniwersalny czyli osoba podaje 20 rzędów to robi dwadziescia rzędów po 3 kombinacje.
artuross
To już napisałem - wykorzystujesz funkcję eval() - ale zanim ją wywołasz tworzysz kod, który ma być przez nią wykonany, w Twoim wypadku musisz zapętlić tworzenie pętli i następnie użyć eval().

@2xup, jak nie tongue.gif przecież odpowiedziałem na pytanie zanim jeszcze ono się pojawiło haha.gif
nikestylex7
jakiś przykłąd na którym mógłbym bazować?

ale funkcja eval spowalnia wywołanie skryptu bardzo długo trzeba czekać. ładowanie danych statycznie jest szybsze.
darko
Hmm, jeżeli mowa o kombinacjach bez powtórzeń, to jakoś nie widzę matematycznie takiej możliwości, żeby ze zbioru 3-element-owego wyciągać podzbiory o większej liczbie elementów niż zbiór pierwotny. Bo niby jak wyznaczyć liczbę kombinacji: n po k (wychodzi 3! / 3!(3-4)! - a co to jest silnia z liczby ujemnej i jak to wyliczyć?
nikestylex7
dalej nie rozumiecie. chce kombinacje bez powtórzeń. opisze wam to tak mam 4 rzędy dzieciaków i w każdym rzędzie siedzą 3 osoby ile unikalnych kombinacji mogę z tego wyciągnąć no to 3 * 3 * 3 * 3 = 81 kombinacji i teraz skrypt ma je rozpisać czy na razie do tego doszliśmy . tylko jak teraz zrobić jakbym chciał aby ilość rzędów i kombinacji była zmienna np do wyboru max 10 rzędów i od 2 do 3 kombinacji na rząd.

Czy przykład styryla dałoby radę przerobić tak aby był uniwersalny i gdy osoba wybierze sobie np 10 rzędów kombinacji to mu je obliczy i wyświetli. Chciałybym tutaj uniknąć powtarzania skryptu oraz dużej jego ilości.
ShadowD
Dało by tylko weź się i coś zaproponuj coś z kodu, bo tak to szukasz gotowca, a ten dział nie jest od dawania gotowców.

Jeśli chodzi o rady z eval - zapomnij o nich to jest jakaś kpina a nie rada, zamiast tego posłuchaj się ludzi mówiących o rekurencji - poczytaj co to takiego.

W funkcję opakuj 1 wywołanie pętli, a nią samą wywołuj właśnie tyle razy ile chcesz uzyskać rzędów, czyli kolejna pętla.
nikestylex7
Ok postaram się jakoś to ogarnąć
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.