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: Sekurak Academy 2024

Sekurak Academy 2024

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp do materiałów z edycji Sekurak Academy z roku 2023! Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat -30% na bilety w wersji "Standard" - warto korzystać! 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.

Uwaga - w dniach od 06.02.2024 do 15.02.2024 trwa w Helion.pl walentynkowa akcja promocyjna "Pokochaj kodowanie!" - otrzymujemy drugą książkę gratis albo -35% na jedną książkę drukowaną oraz -40% na ebooka. Zobacz promocję walentynkową tutaj.

Bądź na bieżąco
Pasja informatyki