关于抽奖概率问题 单独计算每个商品的抽中概率的算法php实现

最近在写一个小程序,关于抽奖概率的问题,可以自由上传抽奖商品,每个商品是独立的,可以单独设置商品

比如

苹果抽中的概率是0.001

香蕉抽中的概率是0.01

橘子抽中的概率是0.05

鸭梨抽中的概率是5

谢谢惠顾的概率是100

我在这里提供一个思路,就是按照概率从小到大排序,然后取整  比如,只能是小于100的整数 !

那么苹果的倍率就是1/100000,整数是1      所以$data=mt_rand(1,100000) ; 如果随机数小于等于整数就表示抽中,则结束本次抽奖

如果 苹果,香蕉,橘子,鸭梨 按照这个顺序都没有抽中,则最后抽奖结果会在谢谢惠顾100%上!

下面是示例

<?php
    $proArr=["苹果"=>0.01,"鸭梨"=>0.1,"葡萄"=>5,"谢谢惠顾"=>100];
    $result = array();
     //传入数组只取出概率
     $arr=[];
     foreach ($proArr as $key => $val) {
         $arr[$key] = $val;
         
     }
     //按照概率排序
     asort($arr);
     print_R($arr);
     foreach ($arr as $k => $v) {
         $proSum=1;
         //获取倍率
         while(true){
             $back=$v*$proSum;
             if(strstr((string)$back, ".") == false){
                 $proSum=$proSum;
                 break;
             }else{
                 $proSum=$proSum*10;
             }
         }
         //获取整数
         $proSumhead=$v*$proSum;
         //获取倍率*100
         $proSum=$proSum*100;
         $randNum = mt_rand(1, $proSum);
         echo "概率".$proSumhead."/".$proSum."___"."随机数".$randNum."\n";
         if ($randNum <= $proSumhead) {
             echo "恭喜抽中".$k;
             break;
         } 
     }
?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值