Szansa na wylosowanie liczby
Ostatnio zmodyfikowano 2011-07-28 14:08
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-28 03:15:03 No teraz skumalem i tak na każda liczbe jest taka sama szansa wylosowania. Przy okazji znalazlem lepszy sposób np wylosowanie nie jednej liczby tylko np 3 i to w odpowiedniej kolejnosci :) |
|
jankowalski25 |
» 2011-07-28 11:22:41 Losuję liczbe w zakresie od 1 do 100. Jeśli wylosowana liczba jest liczbą od 1 do n, jest ona zamieniana na liczbę 5. W przeciwnym wypadku jest losowana liczba z zakresu od 1 do 10, ale bez liczby 5. Dzięki temu masz n procent szans na wylosowanie liczby 5. Nie wiem, czy mój sposób jest prawidłowy, ale możesz spróbować go zastosować. Myślę, że powinno zadziałać. Oto kod, który wylosuje liczbę z zakresu od 1 do 10 sto razy i liczba 5 będzie miała 50% szans:
#include <iostream> #include <cstdlib> #include <ctime>
int wylosuj( int a, int b ) { int c; c =( rand() % b ) + a; return c; }
int test( int a, int b, int c, int d, int e, int f ) { if( a >= b && a <= c ) { a = d; } else { do { a =( rand() % f ) + e; } while( a == d ); } return a; }
int main() { int a, b; a = b = 0; srand( time( NULL ) ); do { a = wylosuj( 1, 100 ); a = test( a, 1, 50, 5, 1, 10 ); std::cout << a << " "; b++; } while( b < 100 ); return 0; }
Czy o coś takiego Ci chodziło? |
|
ison |
» 2011-07-28 14:08:43 #include <cstdio> #include <cstdarg> #include <cstdlib> #include <ctime>
int Rand( const int amount,...) { if( amount <= 0 ) return - 1; int * percent = new int[ amount ]; int val = 0; va_list vl; va_start( vl, amount ); for( int i = 0; i < amount; ++i ) { percent[ i ] = va_arg( vl, int ); val += percent[ i ]; } va_end( vl ); if( val != 100 ) { delete[] percent; return - 1; } int r = rand() % 100 + 1; int tmp = 0; for( int i = 0; i < amount; ++i ) { if( r <= tmp + percent[ i ] ) { delete[] percent; return i; } tmp += percent[ i ]; } delete[] percent; return - 1; }
int main() { srand( time( 0 ) ); int wynik = Rand( 5, 20, 20, 20, 20, 20 ); printf( "%d\n", wynik ); }
jako argument funkcji Rand podajesz najpierw ilość liczb, które mogą być wylosowane a potem szanse w % na wylosowanie poszczególnej liczby np 5, 20,20,20,20,20 szansa, że wypadnie 0 20% 1,20% 2,20% 3,20% 4,20% lub 2, 50,50 szansa, że wypadnie 0 50% 1,50% suma % zawsze musi być równa 100% |
|
1 « 2 » |