看了题目,我的理解是这样的。第一种理解:
1.中奖机率是3%,
2.只能有5个人中奖。
那么 N*3%=5,N=5/3%=166.6666667,因为不存在半个人,那么当总人数是166人。<?php
$arr = array(1,1,1,1,1);
$arr = array_pad($arr, 166, 0);  // 填充161个号不中奖
shuffle($arr);                   // 打乱顺序,使5个中奖的号随机分配在166个号中
print_r($arr);
?>第二种理解:
最多5个人中奖,那就是中奖范围是0-5个人
然后中奖机率是3%。
就是每个人抽奖时,都是3%的机率,但只要有5个人抽中后,之后的人都不会中奖。
等于定义了中奖总数,抽完就完了,不用管共有多少人参加抽奖。<?php
function gift(){    static $win=5;    if($win>0){
        $tmp = mt_rand(1,33); // 3%
        if($tmp==1){
            $win--;
            return true;
        }
    }
    return false;
}// 模拟1000次抽奖
for($i=0; $i<1000; $i++){
    var_dump(gift());
}
?>

解决方案 »

  1.   

    sorry     貌似我题目有问题
    其实是这样的,我做一个刮刮卡的功能,假设在后台这样设置:然后这个算法或者逻辑怎么来搞   有点迷糊  
      

  2.   

    直接在 sql 里实现 吧select empno , empname from employee order by rand() limit 0,5 
      

  3.   

    php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
      

  4.   

    刮刮卡 是即开即中的奖型
    筹码数和中奖号码都是预先确定的
    5 / 0.03 = 166.66666666667
    可取筹码数 166 或 167
    中奖号码 rand(1, 166) 5 次,保存
    抽奖时 rand(1, 166) 需保存每次的抽中号码,已抽中的不再被抽中,不然中奖概率会变小