出个题 考考大家伙儿

WBOY
发布: 2016-06-13 11:58:52
原创
1094 人浏览过

出个题 考考大伙儿
某单位进行抽签比赛,只设一个奖项。
数量是只能有5个人中奖,中奖概率是3%
如何算出5个中奖号码?

------解决方案--------------------
举个实例说明下 看上面描述的不是很清楚
------解决方案--------------------
看了题目,我的理解是这样的。

第一种理解:
1.中奖机率是3%,
2.只能有5个人中奖。
那么 N*3%=5,N=5/3%=166.6666667,因为不存在半个人,那么当总人数是166人。

<br /><?php<br />$arr = array(1,1,1,1,1);<br />$arr = array_pad($arr, 166, 0);  // 填充161个号不中奖<br />shuffle($arr);                   // 打乱顺序,使5个中奖的号随机分配在166个号中<br />print_r($arr);<br />?><br />
登录后复制

第二种理解:
最多5个人中奖,那就是中奖范围是0-5个人
然后中奖机率是3%。
就是每个人抽奖时,都是3%的机率,但只要有5个人抽中后,之后的人都不会中奖。
等于定义了中奖总数,抽完就完了,不用管共有多少人参加抽奖。
<br /><?php<br />function gift(){<br /><br />    static $win=5;<br /><br />    if($win>0){<br />        $tmp = mt_rand(1,33); // 3%<br />        if($tmp==1){<br />            $win--;<br />            return true;<br />        }<br />    }<br />    return false;<br />}<br /><br />// 模拟1000次抽奖<br />for($i=0; $i<1000; $i++){<br />    var_dump(gift());<br />}<br />?><br />
登录后复制

------解决方案--------------------
直接在 sql 里实现 吧

select empno , empname from employee order by rand() limit 0,5 
登录后复制

------解决方案--------------------
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
------解决方案--------------------
刮刮卡 是即开即中的奖型
筹码数和中奖号码都是预先确定的
5 / 0.03 = 166.66666666667
可取筹码数 166 或 167
中奖号码 rand(1, 166) 5 次,保存
抽奖时 rand(1, 166) 需保存每次的抽中号码,已抽中的不再被抽中,不然中奖概率会变小

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板