Witam.?
Czy jest jakiś w miarę prosty sposób aby wyświetlać losowe liczby np. wszystkie pięciocyfrowe tak , aby żadna z nich się nie powtórzyła ??
Z góry dziękuję za odpowiedz :)
0
0
Jest taki sposób :)
0
- Wypełniasz tablicę możliwymi do wylosowania liczbami
- Mieszasz: http://www.cplusplus.com/reference/algorithm/random_shuffle/
- Wybierasz pierwszych kilka.
Jeżeli potrzebujesz znacznie mniej niż wszystkie, to można zrobić własną metodę szufle która wymiesza tylko pierwszych N elementów.
Jeżeli zaś liczba możliwych jest gigantyczna zaś potrzebujemy tylko kilka liczb to losując kolejną liczbę sprawdzamy czy już jej nie wylosowaliśmy wcześniej, jeżeli tak to powtarzamy losowanie.
http://4programmers.net/Forum/Newbie/175093-losowanie_dziesieciu_liczb_bez_powtorzen?p=1092441#id1092441
0
Możesz tez
- Losujesz odpowiednią liczbe
- Sprawdzasz w
std::unordered_map
std::unordered_set
czy została wylosowana
2.1. Jeśli nie, wstawiasz ja do setu (seta?) i wypisujesz.
Istotne jest to, że zamortyzowany czas wykonania kroku 2. toO(1)
, więc nas to nie boli.
1
pingwindyktator napisał(a):
- Sprawdzasz w
std::unordered_map
czy została wylosowana
WTF? Czemu niestd::unordered_set
czym ma być druga wartość?
pingwindyktator napisał(a):
Istotne jest to, że zamortyzowany czas wykonania kroku 2. to
O(1)
- warto podkreślić że tylko w przypadku
std::unordered_set
ewentualniestd::unordered_map
mimo że to be zsensu.
0
Fakt, unordered_set
byłby lepszy.