Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykluczenie wszelkich możliwych kombinacji dwóch lub większej ilości liczb z zakresu liczb
Forum PHP.pl > Forum > PHP
starach
Mam taką małą zagwostkę matematyczną. Mam zakres liczb od 2 do 20 i dwie lub więcej liczb których to muszę wykluczyć wszelkie kombinacje z tego zakresu. Wykombinowałem sobie że zacznę od lewej strony czyli od liczb 2 oraz 3 i przesunę 3 maksymalnie do prawej strony po czym to samo zrobię z liczbą 2. To nie będą jednak wszystkie wykluczenia, bo przecież nie będę mieć w wygenerowanej puli, liczb pośrednich, czyli np. 2-20:3,4. Idąc dalej wymyśliłem że można użyć drugiej iteracji i przesunąć liczby startowe ( 2 i 3 ) razem w prawą stronę. To też jest nie do końca dobre rozwiązanie bo jak wspomniałem wcześniej ilość liczb wykluczanych jest niewiadoma. Macie jakiś pomysł jak to rozwiązać?
Spawnm
może tablica z liczbami do wywalenia w str_replace" title="Zobacz w manualu PHP" target="_manual ?
starach
Możesz jaśniej, bo nie za bardzo rozumiem.
dr_bonzo
Cytat
Mam zakres liczb od 2 do 20 i dwie lub więcej liczb których to muszę wykluczyć wszelkie kombinacje z tego zakresu

Nic z tego nie rozumiem. Opisz to dokladniej i podaj kilka przykladow.
Spawnm
$liczby=2383266;
$wywal=2;
$liczby=str_replace($wywal,'',$liczby);
wywali wszystkie 2 smile.gif
poczytaj manual

albo tak jak pisze dr_bonzo opisz lepiej problem tongue.gif
starach
Ehh spawnm zupełnie nie o to chodzi.
  1. <?php
  2. $zasieg_start = 2;
  3. $zasieg_koniec = 7;
  4. // Liczby początkowe wszystkich kombinacji dwóch jakichokolwiek liczb należących do zakresu 2 do 7
  5. $do_wykluczenia = array(2, 3);
  6. // Przenieś do tempa w celu wykonania innej operacji mieszania
  7. $temp = $do_wykluczenia;
  8. for($j = count($do_wykluczenia) - 1; $j >= 0; $j--)
  9. {
  10.    for($i = $do_wykluczenia[$j]; $i < $zasieg_koniec; $i++)
  11.    {
  12.        echo "$zasieg_start-$zasieg_koniec:".implode(',', $do_wykluczenia)." <br />";
  13.        $do_wykluczenia[$j]++;
  14.    }
  15. }
  16. echo '<hr>';
  17. for($i = end($temp); $i < $zasieg_koniec - 1; $i++)
  18. {
  19.    foreach($temp as $index => $wykluczenie) { $temp[$index]++; }
  20.    echo "$zasieg_start-$zasieg_koniec:".implode(',', $temp)." <br />";
  21. }
  22. ?>

Output:
Kod
2-7:2,3
2-7:2,4
2-7:2,5
2-7:2,6
2-7:2,7
2-7:3,7
2-7:4,7
2-7:5,7
2-7:6,7

2-7:3,4
2-7:4,5
2-7:5,6

Teraz pojawia się tylko pytanie co zrobić jeśli będzie większa ilość liczb.
Cytat
To też jest nie do końca dobre rozwiązanie bo jak wspomniałem wcześniej ilość liczb wykluczanych jest niewiadoma. Macie jakiś pomysł jak to rozwiązać?

edit>
Aha jeszcze sobie zdałem sprawę z tego że to nie są wszystkie możliwe wykluczenia. np. 2-7:3,5 / 2-7:3,6 / 2-7:3,7 ... :|
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.