diego997 Temat założony przez niniejszego użytkownika |
Szansa na wylosowanie liczby » 2011-07-28 01:50:32 Sory, że tak często tematy nowe zakładam, ale coś mi się przypomniało. Macie jakiś swój sposób na losowanie liczb ? Np. ze zbioru liczb od 0 - 10 szansa na wylosowanie 5 wynosiła 20%? |
|
akwes |
» 2011-07-28 01:54:19 Hm... Policzyć! :P
Szansa na wylosowanie liczby całkowitej z przedziału <1,10> jest dla każdej 10%, zatem aby zwiększyć szanse wylosowania liczby 5 do 20% należy powtórzyć losowanie jeszcze raz, jeżeli nie wypadnie od razu liczba 5. Do 30%, trzy takie losowania, do 40% cztery. :P
Tak mi się wydaje. Tylko wraz z kolejną próbą innym liczbom też zmienia się szansa (chyba, trzeba by ich zapytać xD).
//edit W sumie to innym się nie zwiększa szansa na wylosowanie, przy każdym losowaniu jest dla wszystkich taka sama, zaś przy rozpatrywaniu wszystkich losowań, to 5 zyskuje na szansie, zmniejszając szansę innych.
//edit2 Dzięki, poprawione |
|
ison |
» 2011-07-28 01:57:23 @up liczbom Więc jeśli losowanie powtórzyłbyś 10 razy to miałbyś 100% szans, że wylosujesz liczbę 5? A jeśli 11 razy to 110%? :D |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-28 01:58:34 Wiadomo że pętla chodzi szybko warto zastosować sf::Clock ? Czy może po prostu zwiększyć przedział liczb np od 0 - 5000 ? |
|
akwes |
» 2011-07-28 02:02:49 Cholera, faktycznie źle :P Ale zasada będzie taka, ilość losowań inna.
<< wykasowane bzdury >>
Wcześniej było poprawniej :P
na 10 000 obiegów pętli, i dwóch losowań wypadnięcia 5 są na poziomie 1800-1950
za to przy 4 powtórzeniach na 10 000 obiegów, piątka wypada średnio 3400-3600 razy, sądzę że moje podane dane nie były aż tak odbiegające od normy :P
@diego997 co właściwie chcesz osiągnąć ? |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-28 02:21:21 TEżto teraz sprawdzam i im większą liczbe wpisuje żeby wylosował tym mniejsza szansa. Potrzebne mi to jest do gry szansa na wypadniecie z potworka tego lub tego ;p. W procentach by to było łatwiej zmiejszyć
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-28 02:36:27 żałosne jest te losowanie patrzcie int main() { srand( int( time( NULL ) ) ); int k = 1; float random; for( int i = 0; i < 1000000000; i++ ) { random =( rand() % 1000000000 ) + 0; if( random == 32767 ) { cout << k << endl; ++k; } } getch(); }
Wklejcie sobie ten kod i skompilujcie powinno wam się wyswietlać ile razy zostałą wylosowana liczba 32767, a potem zmienncie tą liczbę na 32768 i zobaczcie co się stanie |
|
akwes |
» 2011-07-28 02:48:29 Po prostu to jest jego zakres :P the max of rand() is 32767, but that is OK, the rand() will repeat when it is called more than 32767 times.
|
i jest to zakres signed short int :P Mówiłeś że chcesz żeby przedmiot wypadał z szansą, tu masz szansę 25%, aby ją zmienić, zmień argument funkcji RandChance. Spróbuj tego: (Pisane na szybko, działa do 50% :P powyżej zawsze losuje 100%, ale można zmienić) #include <cstdlib> #include <iostream> #include <conio.h>
using namespace std;
bool RandChance( unsigned short ile ) { if( ile == 0 ) return false; int chance = 100 / ile; int random = rand() % chance; if( random == chance / 2 ) return true; else return false; }
int main() { srand( int( time( NULL ) ) ); int k = 1; cout << "Zdarzenie ktore ma 30% szansy podczas 10 000 losowan wypadlo: "; int licznik = 0; for( int i = 0; i < 10000; i++ ) { if( RandChance( 25 ) ) licznik++; } cout << licznik; cout << "\nCo daje nam: " << licznik / 100 << "%."; getch(); }
Nie zawsze wychodzi 25%, no ale blisko, i można ustawić ile się chce do 50% :P Można przerobić żeby działało do 100% bo chodzi o problem z dzieleniem, ale to już jak będziesz chciał to zasadę znasz :P |
|
« 1 » 2 |