首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成具有固定概率的随机数

生成具有固定概率的随机数
EN

Stack Overflow用户
提问于 2014-02-05 08:46:00
回答 4查看 11.6K关注 0票数 5

我在论坛上发表了很多关于这个问题的评论,但是所有的答案都是针对这个问题而提出的。我发现的最接近我需要的是:Probability Random Number Generator by Alon Gubkin

不同的是,阿龙要求给一张脸(也就是六张脸)额外的机会。在我的例子中,我想把六张脸的机会平分,使它们加起来达到100%。例如,脸1有40%的机会,脸2只有10%,脸3有25%,等。

我怎么能这么做?

EN

回答 4

Stack Overflow用户

发布于 2014-02-05 08:54:07

一种非常简单的方法是有一个长度为100的数组,在其中写入"faces“数字,对其进行洗牌,并获得第一个元素。

这个数组中的例子是40x1,10x2,25x3。

小代码示例(未测试):

代码语言:javascript
复制
$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];
票数 2
EN

Stack Overflow用户

发布于 2014-02-05 08:52:59

在您的情况下,您可能会生成从1到100之间的随机,然后:

代码语言:javascript
复制
if random in 1:40 -> face 1
elseif random in 41:50 -> face 2
and so on. 

当然,要获得真正的范围而不是硬编码的ifs,实代码可能会更复杂一些。

票数 1
EN

Stack Overflow用户

发布于 2014-02-05 08:54:02

我能想到一个非常简单的解决方案。这个方法不会改变随机数生成器的生成模式,而是解释结果,以适应上面的问题。我会要求随机数生成器生成0到9之间的数字。然后执行以下映射,根据分配给该值的概率,将生成的数字的范围分配给in值:

代码语言:javascript
复制
If result <= 3, face=1
else if result <=5, face =2
else is result <=25 face =3
//and so on
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21572363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档