losowanie liczb bez powtórzeń

0

Cześć,
Dopiero co zacząłem swoją przygodę z programowaniem w C++ i postanowiłem zrobić program, który losuje 7 liczb z przedziału od [1,49]. Wszystko dobrze zrobilem za pomocą funkcji rand ale losuje mi np dwie takie same liczby. Bardzo bym prosił aby ktos mi wytłumaczył w postaci pseudokodu jak to można zrobić aby nie losowało mi tych samych liczb.

3

W takim przypadku najprościej:

  1. Utworzyć kontener z zadanymi wartościami
  2. Potasować je
  3. Wybrać n pierwszych.

Dla małych zbiorów jest to świetne rozwiązanie, dla większych już nie. 49 elementów to mały zbiór.

int main()
{
    vector<int> vals(49);
    iota(vals.begin(), vals.end(), 1);

    DBG_CONT(vals);

    mt19937 gen{random_device{}()};
    shuffle(vals.begin(), vals.end(), gen);

    DBG_CONT(vals);

    vals.resize(6);
    DBG_CONT(vals);
}

https://wandbox.org/permlink/Ttq2DGVzvZKrkXYI

0

A co to takiego ten kontener? Może to jeszcze za trudne dla mnie?

0

Ogólniejsze pojęcie na tablice, listy i inne (ech) kontenery. vector to np. tablica o wielkości ustalanej podczas działania programu - co zresztą można wywnioskować z mojego kodu wyżej.

0

O kontenerach w C++ i nie tylko: http://www.cplusplus.com/reference/stl/ Ogólnie polecam całą stronę.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.