Losowanie bez powtórzeń w PHP i C++. Gra Milionerzy

To częste pytanie: jak wylosować wartości z pewnego zbioru (tablicy wartości) w taki sposób, aby żadna z nich nie powtórzyła się? Dziś przedstawiam realizację takiego algorytmu w języku PHP oraz C++. Pojawi się też bonus w postaci mini-gry napisanej w PHP. Oto algorytm losowania bez powtórzeń w PHP:

$ile_pytan = 20; //z ilu pytan losujemy?
$ile_wylosowac = 5; //ile pytan wylosowac?
$ile_juz_wylosowano=0; //zmienna pomocnicza

for ($i=1; $i<=$ile_wylosowac; $i++)
{
do
{
$liczba=rand(1,$ile_pytan); //losowanie w PHP
$losowanie_ok=true;

for ($j=1; $j<=$ile_juz_wylosowano; $j++)
{
//czy liczba nie zostala juz wczesniej wylosowana?
if ($liczba==$wylosowane[$j]) $losowanie_ok=false;
}

if ($losowanie_ok==true)
{
//mamy unikatowa liczbe, zapiszmy ja do tablicy
$ile_juz_wylosowano++;
$wylosowane[$ile_juz_wylosowano]=$liczba;
}

} while($losowanie_ok!=true);
}

// ZOBACZ REZULTATY LOSOWANIA
echo "Wylosowane numery: ";
for ($i=1; $i<=$ile_wylosowac; $i++)
{
echo $wylosowane[$i]." ";
}

W rezultacie wykonania kodu otrzymujemy tablicę o nazwie $wylosowane[] zawierającą 5 unikatowych numerów pytań (tutaj w indeksach od 1 do 5). Kluczowym momentem algorytmu jest każdorazowe sprawdzenie, czy przypadkiem właśnie wylosowany z przedziału numer pytania nie znajduje się już w tablicy $wylosowane[]. Jeśli tak, zmienna $losowanie_ok przyjmuje wartość false, co sprawia, że wylosowana liczba nie zostanie zapisana po raz drugi do tablicy. Zaś dzięki zewnętrznej pętli do..while nastąpi kolejna próba losowego wybrania unikatowej liczby. Analogicznie wygląda to w języku C++. Przygotowałem dwie paczki ZIP do pobrania, zawierające oprócz algorytmu także mini wersję demonstracyjną (aby móc zobaczyć rezultaty algorytmu na ekranie).

Dodatkowo, w wolnej chwili udało mi się ukończyć quiz z programowania o nazwie Milionerzy. Rozgrywka, jak nietrudno się domyślić, wzorowana jest na popularnym teleturnieju o tej samej nazwie. Nie ma nic przyjemniejszego niż połączyć przyjemne z pożytecznym i uczyć się w czasie gry :) Przyjdzie nam pogłówkować nad pytaniami zadawanymi przez trzech komputerowych nerdów!

Zobacz także

Daj się zaskoczyć! Poniżej wylosowałem dla Ciebie pięć wpisów z innych kategorii blogowych aniżeli ta, którą właśnie przeglądasz:

Polecamy: Mega Sekurak Hacking Party

Mega Sekurak Hacking Party

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - wpiszcie go w koszyku, dzięki czemu otrzymacie 40% zniżki na bilet standard. Więcej szczegółów znajdziecie tutaj.

Książka: Wprowadzenie do bezpieczeństwa IT

Wprowadzenie do bezpieczeństwa IT

Niedawno wystartował dodruk świetnej, rozchwytywanej książki pt. "Wprowadzenie do bezpieczeństwa IT, Tom I" (około 940 stron). Mamy dla Was kod: pasja (wpisz go w koszyku), dzięki któremu otrzymacie 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla naszych Widzów! Jest to pierwszy tom serii o ITsec, który wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

Pomóż dzieciom

Polska Akcja Humanitarna od wielu lat dożywia dzieci. Proszę, poświęć teraz dosłownie chwilę i pomóż klikając w oznaczony strzałką zielony brzuszek Pajacyka. Dziękuję!

Komentarze

Disqus

Kategorie wpisów

Oto polecana książka warta Waszej uwagi.
Pełna lista polecanych książek jest tutaj.

W dniach od 09.04.2024 do 15.04.2024 trwa w Helionie promocja o nazwie "Otwórz nowy rozdział w IT". Otrzymujemy zniżki -50% zarówno na książki drukowane, jak i na ebooki. Zobacz szczegóły tutaj: trwająca promocja.

Bądź na bieżąco