2015-11-26 97 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