php实现可以设置中奖概率的抽奖程序代码分享

php实现可以设置中奖概率的抽奖程序代码分享,第1张

这篇文章主要介绍了一个抽奖程序,要求一等奖的中奖概率脊绝滑是0.12%,二等奖中奖概率樱腊是3%,三等奖中奖概率是12%,其他中奖概率宏巧是都是谢谢惠顾

代码如下:

<?php

/**

*

抽奖

*

@param

int

$total

*/

function

getReward($total=1000)

{

$win1

=

floor((0.12*$total)/100)

$win2

=

floor((3*$total)/100)

$win3

=

floor((12*$total)/100)

$other

=

$total-$win1-$win2-$win3

$return

=

array()

for

($i=0$i<$win1$i++)

{

$return[]

=

1

}

for

($j=0$j<$win2$j++)

{

$return[]

=

2

}

for

($m=0$m<$win3$m++)

{

$return[]

=

3

}

for

($n=0$n<$other$n++)

{

$return[]

=

'谢谢惠顾'

}

shuffle($return)

return

$return[array_rand($return)]

}

$data

=

getReward()

echo

$data

?>

问题衫腔有点模糊,我先暂时把“保留两位小数”理解成“[输出的随机数]保留两位小数”,而非其他因素保留多少小数。

又把“1-10”,理解成包括1和10在内其两数之间的小数,

把10-50,理解成10.01到50.00之间的数,不包括10.00。以此类推。

<?php

function genRandom(){

$p=rand(1,100)

if($p<=60) $r=rand(100,1000)

elseif($p>60 and $p<=85) $r=rand(1001,5000)

elseif($p>85 and $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>=1 and $c<=10) $p=0

elseif($c>10 and $c<=50) $p=1

elseif($c>50 and $c<=100) $p=2

elseif($c>100 and $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%

解决思路如下:

1)以数字区段来对应中奖情况例如有一、二、三等奖,各自的中奖概率分别为10%、20%、30%那么有如下划历灶扰分:1-10,一等奖;11-30,二等奖;31-60,辩陪三等奖,60以上,未中奖

2)产生一个1~100之间的随机数,看随机数属于哪个奖项区域,以确定中奖肢旦情况


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12503826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存