使用赔率的随机数发生器

时间:2014-01-26 23:05:41

标签: c random probability

因此,我们有一个团队项目将在一天结束时到期,除了一个人之外,每个人都已经完成了他们的工作。我们没有多少时间离开,我也没有从那个人那里听到过,所以我决定写下那些人,因为他们从不上传它。 问题是......我不知道如何做这个部分。 有三匹马,我必须做到这一点,以便1匹马随机赢得比赛。这很简单。只需使用

   <time.h>
   srand((unsigned)time(NULL));
   1 + rand()%(3-1+1);

问题是每匹马应该有不同的概率

马1有45%的获胜机会 马2有30% 马3 25% (注意这个加起来为100)

有人可以帮我弄清楚如何使用概率让马随机获胜吗? 由于我的情况,直到一天结束,我自己想出这个:(

4 个答案:

答案 0 :(得分:3)

选择1到100范围内的随机数,均匀分布。 1至45是马1,26至75是马2,76至100是马3。

如果您愿意,可以将算法调整为基于零的索引。

答案 1 :(得分:1)

生成U(0,1),将其称为u。如果{1}}马1获胜,否则u <= 0.45(即介于0.45和0.75之间)它是马2,否则它是马3.这在概念上类似于David Heffernan提出的基于整数的解决方案,但可以处理任意概率不能很好地映射到整数集,例如1 / pi或1 / e。

答案 2 :(得分:0)

将RNG生成的数字范围分成具有相应尺寸的碎片。然后找出一个数字所在的部分来决定哪匹马获胜。

听起来马的数量很少,所以简单的if else链可能会正常工作。如果你有很多匹马并且速度很重要,那么将这些碎片的边界放在一个数组中,并通过二分搜索找到正确的一个。

答案 3 :(得分:0)

尝试使用随机数生成器功能。 导入头文件     #包括 要么     #包括 将函数分配给将存储值的变量 例如     R =兰特();

然后你可以将每匹马作为阵列的一个元素。 使用排序技术对此数组进行排序以找到最大值。