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:

Kody zniżkowe - kup taniej

Mamy fajne rabaty dla widzów naszego kanału YouTube - otóż można zamówić dwa tomy książek "Wprowadzenie do bezpieczeństwa IT" (15% taniej) oraz książkę "Twierdza Linux. Bezpieczeństwo dla dociekliwych" (10% taniej) - użyjcie odpowiedniego kodu, wpisując go w specjalne pole w koszyku:

KOD: pasja

Wprowadzenie do bezpieczeństwa IT tom 1

Dostajesz rabat -15%

KOD: pasja

Wprowadzenie do bezpieczeństwa IT tom 2

Dostajesz rabat -15%

KOD: pasja-linux

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Dostajesz rabat -10%

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

Czy macie jakieś pytania, sugestie, uwagi? A może zauważyliście literówkę albo błąd? Dajcie koniecznie znać: kontakt@pasja-informatyki.pl. Dziękujemy za poświęcony czas - to dzięki Wam serwis staje się coraz lepszy!

Kategorie wpisów

Kursy INF.02 i INF.03
Bądź na bieżąco
Pasja informatyki