Ⅰ php ThinkPhP 5.1 按概率生成随机数
echo (rand(1,100) <= 70 ? rand(1,50) : rand(51,100))/100;
先说明:伪随机
rand(1,100)产生1~100范围内随机数
如果 产生的随机数 小于等于 70
返回 1~50 随机数
否则返回 51~100 随机数
最后随机数/100即可。
为什么除以100,是因为rand 的参数均为int,所以放大100倍获取随机,得出结果后再缩小100倍刚好就是分了。
Ⅱ php取随机数概率算法
问题有点模糊,我先暂时把“保留两位小数”理解成“[输出的随机数]保留两位小数”,而非其他因素保留多少小数。
又把“1-10”,理解成包括1和10在内其两数之间的小数,
把10-50,理解成10.01到50.00之间的数,不包括10.00。以此类推。
<?php
functiongenRandom(){
$p=rand(1,100);
if($p<=60)$r=rand(100,1000);
elseif($p>60and$p<=85)$r=rand(1001,5000);
elseif($p>85and$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>=1and$c<=10)$p=0;
elseif($c>10and$c<=50)$p=1;
elseif($c>50and$c<=100)$p=2;
elseif($c>100and$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一个抽奖函数(自定义中奖项数和概率)
解决思路如下:
1)以数字区段来对应中奖情况例如有一、二、三等奖,各自的中奖概率分别为10%、20%、30%那么有如下划分:1-10,一等奖;11-30,二等奖;31-60,三等奖,60以上,未中奖
2)产生一个1~100之间的随机数,看随机数属于哪个奖项区域,以确定中奖情况
Ⅳ 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
希望可以帮到你呦!~如果有不正确的地方,欢迎指正!~~
本人博客:https://www.boboidea.com ,欢迎交流学习!~~