我正在尝试创建一个骰子游戏,你可以获得一个6面骰子然后滚动,但是每一方的概率都是预定义的(不公平)。
示例:
Side Probability
1 3.63098
2 18.38200
3 10.59424
4 3.87055
5 13.66651
6 49.85572
Total: 100
所以Side 6 应该比其他任何人更频繁地滚动。我尝试了以下方法:
3.63098 + 18.38200 + 10.59424 + 3.87055 + 13.66651 + 49.85572 = 100
并生成一个随机数:rand(0, 100)
并根据其撒谎的位置选择一个数字。
然而,它并不适用于浮点数,最大概率没有 100 可以是23.994,将随机分配到6个方面。
请建议使用算法或在哪里寻找算法,我不是要求为我编写代码只需要研究但不知道要寻找什么。
答案 0 :(得分:3)
您可以生成介于0和RAND_MAX之间的随机数。
然后通过除以100并乘以RAND_MAX将每个概率缩放到RAND_MAX。您可以获得更准确的概率结果。
OR
将生成的随机数除以RAND_MAX并检查它所在的[0,1]范围。
答案 1 :(得分:2)
首先将概率归一化到[0,1]
之内规范化prob(p) = value(p)/(sum of all values)
然后找到每个变量的值范围,例如
1 => 0.2
2 => 0.3
3 => 0.1
4 => 0.2
5 => 0.1
6 => 0.1
then ranges will be:-
1 =>[0,0.2]
2 =>(0.2,0.5]
3 =>(0.5,0.6]
4 =>(0.6,0.8]
5 =>(0.8,0.9]
6 =>(0.9,1.0]
然后对于骰子滚动,在范围[0,1]
中生成随机浮动找到它所包含的范围
例如。随机浮动= 0.37然后在顶部将是2