2014-06-19 69 views
0

如果我想要一个和三个之间的随机数我可以做$n = mt_rand(1,3)控制随机生成的数字的可能性

有33%的几率是$n = 1,33%的几率是2,和33%的机会,这是3

如果我想使它更难以得到一个3比1?假设我想有1%被抽取的概率为50%,抽取2的概率为30%,抽取3的概率为20%?

我需要一个可扩展的解决方案,因为可能的范围会在1-3和1-100之间变化,但总的来说,我希望较低的数字比较高的数字更多。

我该如何做到这一点?

回答

1

这是数学。

在您的例子中,只是选择了0到99之间的随机数

值介于0至49返回 - 称它为1只 值50之间返回 - 69 - 说它2只 值70之间返回 - 99 - 说它3

简单的if语句会做这样或填充,供配电的阵列所需

2

还有就是你如何使用标准统一的随机变量产生随机变量有类似的分布的简单的解释你想要的一个:

https://math.stackexchange.com/a/241543

+0

+1指出这个问题属于数学而不是SO,但这是最简单的解释。 –

1

假设1 - 10的规模,你可以使用if语句简单,并具有数字代表百分比。每个if语句都将$ n设置为特定的。只有垮台,它不是普遍的。

$dummy = mt_rand(1,10); 

// represents 50% 
if ($dummy <= 5) { 
    $n = 1; 
} 
// represents 40% 
if ($dummy >= 6 && $dummy <= 9) { 
    $n = 2; 
} else { 
// represents 10% 
    $n = 3; 
}