我在论坛上发表了很多关于这个问题的评论,但是所有的答案都是针对这个问题而提出的。我发现的最接近我需要的是:Probability Random Number Generator by Alon Gubkin。
不同的是,阿龙要求给一张脸(也就是六张脸)额外的机会。在我的例子中,我想把六张脸的机会平分,使它们加起来达到100%。例如,脸1有40%的机会,脸2只有10%,脸3有25%,等。
我怎么能这么做?
发布于 2014-02-05 08:54:07
一种非常简单的方法是有一个长度为100的数组,在其中写入"faces“数字,对其进行洗牌,并获得第一个元素。
这个数组中的例子是40x1,10x2,25x3。
小代码示例(未测试):
$probabilities = array(
1 => 40,
2 => 10,
3 => 25,
4 => 5,
5 => 10,
6 => 10
);
$random = array();
foreach($probabilities as $key => $value) {
for($i = 0; $i < $value; $i++) {
$random[] = $key;
}
}
shuffle($random);
echo $random[0];发布于 2014-02-05 08:52:59
在您的情况下,您可能会生成从1到100之间的随机,然后:
if random in 1:40 -> face 1
elseif random in 41:50 -> face 2
and so on. 当然,要获得真正的范围而不是硬编码的ifs,实代码可能会更复杂一些。
发布于 2014-02-05 08:54:02
我能想到一个非常简单的解决方案。这个方法不会改变随机数生成器的生成模式,而是解释结果,以适应上面的问题。我会要求随机数生成器生成0到9之间的数字。然后执行以下映射,根据分配给该值的概率,将生成的数字的范围分配给in值:
If result <= 3, face=1
else if result <=5, face =2
else is result <=25 face =3
//and so onhttps://stackoverflow.com/questions/21572363
复制相似问题