losowanie liczb bez powtórzeń

Odpowiedz Nowy wątek
2018-03-31 14:53
Uczynny Kaczor
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.

edytowany 1x, ostatnio: furious programming, 2018-03-31 15:01

Pozostało 580 znaków

2018-03-31 14:57
kq
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


edytowany 1x, ostatnio: kq, 2018-03-31 14:57

Pozostało 580 znaków

2018-03-31 15:09
Uczynny Kaczor
0

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

Pozostało 580 znaków

2018-03-31 15:10
kq
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.


edytowany 1x, ostatnio: kq, 2018-03-31 15:11

Pozostało 580 znaków

2018-03-31 15:18
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0