2015-11-26 96 views
0

我一直在試圖確定如何選擇具有定義概率的各種給定選項,我正在處理的是生成一個介於0和100之間的隨機數,然後與概率進行比較,但是我有很多概率具有相同的百分比。例如:該程序包含一個棒球比賽,我必須根據概率選擇蝙蝠球員的結果。選擇使用概率的各種選項

無需提前:0.04
飛球:0.04
錯誤:0.02
耕地獨身:0.03

等。

srand(time(NULL)); 
double num = rand() % 100; 

double Prob = 70; 
if(num < Prob) 
    cout << num << endl; 

這是我一直在努力的代碼與一個概率工作正常,但是當它涉及到許多概率和一些與它變得複雜相同值的概率。

回答

2

沒有理由在這裏使用double。
而你只需要總結的值(更普遍,它的離散CDF):

int num = rand() % 100; 
if(num < 4) { /*no advance*/ } 
else if(num < 8) { /*fly ball*/ } 
else if(num < 10) { /*error*/ } 
else if(num < 13) { /*infield single*/ } 
else ... 

其他,不使用rand(),不好好隨機數。
<random>頭,尤其是梅森難題,一個更好的選擇
(然後,你甚至可能要使用double

+1

我們不知道概率的其餘部分,以便INT可能是不夠的。 – JBentley

+0

@JBentley但rand()生成整數。檢查'<10.5'或類似的東西不會比檢查<10'做得更好。 – deviantfan

+1

嗯,是的,但正如你所說,還有其他的替代方法來產生隨機數,其中包括生成int以外的類型的方法。在OP的例子中,你的觀點是有道理的。我只是指出它,所以OP知道int可能不夠。 – JBentley