c++ funkcja losująca liczby prawdziwie losowe
Ostatnio zmodyfikowano 2019-12-01 12:07
pekfos |
» 2019-11-30 16:50:59 Brzmi jakbyś chciał uzyskać losową permutację ciągu liczb 1, 2, ..., n. Są na to znacznie lepsze sposoby, niż twoje przekombinowane losowanie bez powtórzeń. Jeśli chcesz tylko uzyskać efekt, wypełnij tablicę kolejnymi liczbami i użyj std::shuffle(). Robienie tego ręcznie mogłoby wyglądać tak: #include <iostream> #include <utility> #include <cstdlib> #include <ctime>
int main() { const int n = 10; int tab[ n ]; srand( time( NULL ) ); for( int i = 0; i < n; ++i ) tab[ i ] = i + 1; for( int i = 0; i < n; ++i ) std::swap( tab[ i ], tab[ i + rand() %( n - i ) ] ); for( int i = 0; i < n; ++i ) std::cout << tab[ i ] << ' '; } i to samo z lepszym generatorem losowym i standardowymi algorytmami: #include <iostream> #include <algorithm> #include <random> #include <ctime>
int main() { const int n = 10; int tab[ n ]; std::iota( tab, tab + n, 1 ); std::mt19937 rng; rng.seed( time( nullptr ) ); std::shuffle( tab, tab + n, rng ); for( int i = 0; i < n; ++i ) std::cout << tab[ i ] << ' '; } |
|
Lewy1607 Temat założony przez niniejszego użytkownika |
» 2019-12-01 12:07:19 Dziękuje za odpowiedź i przykłady lepszych algorytmów,kiedyś na pewno do nich wrócę jak nabiorę doświadczenia z czytania dokumentacji,póki co zostanę przy swoim bo mój przynajmniej rozumiem.Temat zamykam. |
|
1 « 2 » |