Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szansa na wylosowanie liczby

Ostatnio zmodyfikowano 2011-07-28 14:08
Autor Wiadomość
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 :)
P-37420
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:
C/C++
#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?
P-37431
ison
» 2011-07-28 14:08:43
C/C++
#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%
P-37441
1 « 2 »
Poprzednia strona Strona 2 z 2