很多站长朋友们都不太清楚php概率分布算法,今天小编就来给大家整理php概率分布算法,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php 如何随机生成指定数字和概率? 2、 超级难的 php随机分配问题求教高手 3、 php里 ,怎么让数字按不同比 出现,如 1有%10几率出现 2有%30出现 3有%60机会 出现 等等。。 4、 php取随机数概率算法 5、 php概率比例算法问题 6、 php生成随机数,1-15之间,2出现的概率是80% 然后其它数字出现的概率是10% php 如何随机生成指定数字和概率?亲,你可以这样做呦!~~
如果只有这三个数,是不好弄出 0:85% 1:5% 2:10%的
但是你如果想提高某个数字出现的概率,你可以适当让这个数组增多。
你可以这样写:
<?php
// 定义一个数组,里面有85个0
$num0 = array_fill(0, 85, 0);
// 定义一个数组,里面有5个1
$num1 = array_fill(1, 5, 1);
// 定义一个数组,里面有10个2
$num2 = array_fill(2, 10, 2);
// 总数组,里面总共100个元素
$allNum = array_merge($num0, $num1, $num2);
// 随机取一个元素
$randKey = array_rand($allNum);
$randnum = $allNum[$randKey];
// 以上就可以实现出现0的概率是85% 出现1的概率是5% 出现2的概率是10%了,因为一共一百个数,里面有85个是0, 5个是1, 10个是2
希望可以帮到你呦!~如果有不正确的地方,欢迎指正!~~
本人博客: ,欢迎交流学习!~~
超级难的 php随机分配问题求教高手关键在每个人抽的时候的概率要均等。
<?php
$numPpl=rand(3,15);
$a=array();
$sum=0;
echo "num of people:".$numPpl;
foreach(range(1, $numPpl) as $i) {
$a[$i]=mt_rand(0,100);
$sum+=$a[$i];
}
array_walk($a, function($e)use($sum){
$e=$e*100/$sum;
});
echo '<pre>';
print_r($a);
echo "总和:".array_sum($a).'%';
num of people:8
Array(
[1] => 6.3218390804598
[2] => 12.068965517241
[3] => 3.448275862069
[4] => 19.540229885057
[5] => 13.218390804598
[6] => 3.735632183908
[7] => 20.689655172414
[8] => 20.977011494253
)
总和:100%
num of people:14
Array(
[1] => 4.7697368421053
[2] => 4.1118421052632
[3] => 4.9342105263158
[4] => 2.3026315789474
[5] => 4.1118421052632
[6] => 7.2368421052632
[7] => 10.197368421053
[8] => 15.789473684211
[9] => 2.9605263157895
[10] => 10.526315789474
[11] => 15.460526315789
[12] => 6.5789473684211
[13] => 4.7697368421053
[14] => 6.25
)
总和:100%
php里 ,怎么让数字按不同比 出现,如 1有%10几率出现 2有%30出现 3有%60机会 出现 等等。。<?php
$myjilv = array(//配置出现几率
1 => array(1,10),
2 => array(11,30),
3 => array(31,100)
);
function dbt($jilv){//根据几率表产生对应的数字
mt_srand((double)microtime()*1000000);
$randval = mt_rand(1,100);
foreach($jilv as $k => $v){
if($randval>=$v[0] $randval<=$v[1]){
return $k;
}
}
}
echo dbt($myjilv);
?>
php取随机数概率算法问题有点模糊,我先暂时把“保留两位小数”理解成“[输出的随机数]保留两位小数”,而非其他因素保留多少小数。
又把“1-10”,理解成包括1和10在内其两数之间的小数,
把10-50,理解成10.01到50.00之间的数,不包括10.00。以此类推。
<?php
function genRandom(){
$p=rand(1,100);
if($p<=60) $r=rand(100,1000);
elseif($p>60 and $p<=85) $r=rand(1001,5000);
elseif($p>85 and $p<=95) $r=rand(5001,10000);
else $r=rand(10001, 20000);
return $r/100;
}
$a=array();
$total=50000;
for($i=0;$i<$total;$i++){
$c=genRandom();
if($c>=1 and $c<=10) $p=0;
elseif($c>10 and $c<=50) $p=1;
elseif($c>50 and $c<=100) $p=2;
elseif($c>100 and $c<=200) $p=3;
else $p=4;
if(!array_key_exists($p, $a)) $a[$p]=1;
else $a[$p]++;
}
if(!array_key_exists(4, $a)) $a[4]=0;
echo "总样本数".$total.'<br/>';
echo "1-10样本数".$a[0].', 占'.($a[0]/$total*100).'%<br/>';
echo ">10-50样本数".$a[1].', 占'.($a[1]/$total*100).'%<br/>';
echo ">50-100样本数".$a[2].', 占'.($a[2]/$total*100).'%<br/>';
echo ">100-200样本数".$a[3].', 占'.($a[3]/$total*100).'%<br/>';
echo "其他样本数".$a[4].', 占'.($a[4]/$total*100).'%<br/>';
总样本数50000
1-10样本数30052, 占60.104%
>10-50样本数12404, 占24.808%
>50-100样本数4993, 占9.986%
>100-200样本数2551, 占5.102%
其他样本数0, 占0%
php概率比例算法问题一,先统计出总数N
二,增加 数据 arr=原数组 + 3*0.5-1
三,再随机就可以了;
php生成随机数,1-15之间,2出现的概率是80% 然后其它数字出现的概率是10%$rand = 0; // 定义rank随机变量
if(mt_rand(1,100) <= 80) { // 控制2出现的概率为80%
$rand = 2;
} else { // 剩余数字的概率为20%
$rand = mt_rand(2,15); // 排除掉2号位置,用1去补2号位
if($rand == 2) { // 当随机到2号位,则用1去补2号
$rand = 1;
}
}
echo $rand; // 输出结果
关于php概率分布算法的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php概率分布算法 php 概率的详细内容...