Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] losowanie
Forum PHP.pl > Forum > Przedszkole
miki92
jak mozna zrobic losowanie 10 liczb tak zeby 1 losowal w 1/2 przypadkow 2 w 1/4 przypadkow 3 w 1/8 przypadkow itd.
v1t4n
proponuje zrobic losowanie liczb przyladowo od 1-100. Gdy wybierze liczbe 1 lub zakres 11-50 wtedy zwroci 1. Gdy wybierze 2 lub zakres 51-75 wtedy zwroci 2. Gdy 3 i 76-88 wtedy zwroci 3 itd...
miki92
tylo jak to zrobic przy pomocy ifelse??
Darti
czyli w 1/1024 przypadków wylosuje 10?
To i tak trochę nie "po statystycznemu", bo suma ułamków jest różna od 1, ale można zrobić coś pseudo - statystycznego.
Tworzę taką niby dystrybuantę w postaci tablicy (jedynek jest 1024, dwójek 512 itd) i losuję spośród całej tablicy. Kod wygląda tak:
  1. <?php
  2. for ($i=1; $i <= 10; $i++){
  3. $ilosc = pow(2,11 - $i);
  4. for ($j=1; $j <= $ilosc; $j++){
  5. $dystrybuanta[] = $i;
  6. }
  7. }
  8. $losowa = rand(0,count($dystrybuanta) -1);
  9. print ("wylosowana liczba to {$dystrybuanta[$losowa]}");
  10. ?>


Mam nadzieję że takie coś wystarczy smile.gif
p.s.:
druga metoda (bez użycia tablicy):
  1. <?php
  2. $losowa = rand(1,2046);
  3. $ilosc = 10;
  4.  
  5. while ($liczba < $losowa){
  6. $liczba += pow(2,$ilosc);
  7. $ilosc--;
  8. }
  9. $ilosc = 10 - $ilosc ;
  10. echo 'Wylosowana liczba to:' . $ilosc;
  11. ?>
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.