Home  >  Article  >  Backend Development  >  出个题 考考大家伙儿

出个题 考考大家伙儿

WBOY
WBOYOriginal
2016-06-13 11:58:521096browse

出个题 考考大伙儿
某单位进行抽签比赛,只设一个奖项。
数量是只能有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) 需保存每次的抽中号码,已抽中的不再被抽中,不然中奖概率会变小

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn