导航:首页 > 源码编译 > 抽奖概率算法php

抽奖概率算法php

发布时间:2023-07-04 13:51:13

php一个抽奖函数(自定义中奖项数和概率)

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

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

㈡ php取随机数概率算法

问题有点模糊,我先暂时把“保留两位小数”理解成“[输出的随机数]保留两位小数”,而非其他因素保留多少小数。
又把“1-10”,理解成包括1和10在内其两数之间的小数,
把10-50,理解成10.01到50.00之间的数,不包括10.00。以此类推。

<?php
functiongenRandom(){
$p=rand(1,100);
if($p<=60)$r=rand(100,1000);
elseif($p>60and$p<=85)$r=rand(1001,5000);
elseif($p>85and$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>=1and$c<=10)$p=0;
elseif($c>10and$c<=50)$p=1;
elseif($c>50and$c<=100)$p=2;
elseif($c>100and$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%

㈢ 抽奖奖品概率的算法谢谢了,大神帮忙啊

可以预定义一个数,然后根据百分比计算各自的门槛值。如下: (注意:概率需要从小到大排列,因为用if判断的问题。) #define BASE_NUMBER 32767 #define BASE_DIV 100 #define RATE1 1 #define RATE2 5 #define RATE3 20 #define RATE4 74 int var1, var2, var3, var4; main() { var1 = (int)((float)BASE_NUMBER*RATE1/BASE_DIV); var2 = (int)((float)BASE_NUMBER*RATE2/BASE_DIV); var3 = (int)((float)BASE_NUMBER*RATE3/BASE_DIV); var4 = (int)((float)BASE_NUMBER*RATE4/BASE_DIV); ..... if ( rand <= var1 ) { // 第一种 } else if ( rand <= var2 ) { // 第二种 } else if ( rand <= var3 ) { // 第三种 } else { // 第四种 } ... } 如上,只需要改变BASE_DIV 和RATE1 2 3 4就能控制

求采纳

㈣ 有哪些经典的抽奖算法

常见的有两种

第一类是常见的有等级的抽奖活动,如一等、二等、三等奖等等

java">//分别为一、二、三、四等将的奖品数量,最后一个为未中奖的数量。
privatestaticfinalInteger[]lotteryList={5,10,20,40,100};

privateintgetSum(){
intsum=0;
for(intv:lotteryList){
sum+=v;
}
returnsum;
}

privateintgetLotteryLevel(){
Randomrandom=newRandom(System.nanoTime());
intsum=getSum();
for(inti=0;i<lotteryList.length;++i){
intrandNum=Math.abs(random.nextInt())%sum;
if(randNum<=lotteryList[i]){
returni;
}else{
sum-=lotteryList[i];
}
}
return-1;
}

第二类是不分等级的抽奖活动,仅需要参与人数与奖品总数,各奖品中奖概率相等。

//另一种抽奖算法,用于公司抽奖,即总参与人数与奖品数固定。
=75;
privatestaticfinalinttotal=175;
privatestaticSet<Integer>lotterySet=newHashSet<Integer>();
static{
for(inti=1;i<=lotteryNum;++i){
lotterySet.add(total*i/lotteryNum);
}
}
privateintgetLotteryNum2(){
Randomrand=newRandom(System.nanoTime());
intrandNum=Math.abs(rand.nextInt())%total;
if(lotterySet.contains(randNum)){
returnrandNum*lotteryNum/total;
}
return-1;
}

㈤ PHP金额越高中奖率越大,如何实现

你可以把输入的比率都转换成n/10000
然后按n来抽奖
比如1等奖1/1000 即 10/10000
2等奖 30/10000
3等奖 200/10000
4等奖3000/10000
那么10+30+200+3000=3240;
取随机数 r.Next(1,10001)
当0<r<=10 则为1等奖
当 10<r<=10+30 则中2等奖
当 10+30<r<=10+30+200 则中3等奖依次

根据金额判断他的概率

㈥ php大转盘的获奖概率是怎么算的

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法。用法很简单,代码里有详细注释说明,一看就懂

$proCur) {

$randNum = mt_rand(1, $proSum);

if ($randNum <= $proCur) {

$result = $key;

break;

} else {

$proSum -= $proCur;

}

}

unset ($proArr);

return $result;

}

/*

* 奖项数组

* 是一个二维数组,记录了所有本次抽奖的奖项信息,

* 其中id表示中奖等级,prize表示奖品,v表示中奖概率。

* 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,

* 数组中v的总和(基数),基数越大越能体现概率的准确性。

* 本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,

* 如果v的总和是10000,那中奖概率就是万分之一了。

*

*/

$prize_arr = array(

'0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),

'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),

'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),

'3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),

'4' => array('id'=>5,'prize'=>'10Q币','v'=>22),

'5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),

);

/*

* 每次前端页面的请求,PHP循环奖项设置数组,

* 通过概率计算函数get_rand获取抽中的奖项id。

* 将中奖奖品保存在数组$res['yes']中,

* 而剩下的未中奖的信息保存在$res['no']中,

* 最后输出json个数数据给前端页面。

*/

foreach ($prize_arr as $key => $val) {

$arr[$val['id']] = $val['v'];

}

$rid = get_rand($arr); //根据概率获取奖项id

$res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项

unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项

shuffle($prize_arr); //打乱数组顺序

for($i=0;$i

㈦ (概率问题)抽奖的概率计算是什么

(概率问题)抽奖的概率计算(1-1/3)*1*1/1=2/3。

如果是连续抽到1-3个的,而且是不放回抽,则:

(一个)=5/205=1/41。

(二个)=5/205*(4/204)=1/41*(1/51)=1/2091。

(三个)=5/205*(4/204)*(3/203)=1/141491。

因为只有2种选择,换或是不换。假设选换,第一次就抽中的概率是1/3,那么选换后就成了不中;抽不中的是2/3,选择换就是中;于是相当于选换中奖率2/3;如果选不换,同理得到中奖率是1/3。

概率

是度量偶然事件发生可能性的数值。假如经过多次重复试验(用X代表),偶然事件(用A代表)出现了若干次(用Y代表)。以X作分母,Y作分子,形成了数值(用P代表)。在多次试验中,P相对稳定在某一数值上,P就称为A出现的概率。如偶然事件的概率是通过长期观察或大量重复试验来确定,则这种概率为统计概率或经验概率。

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

这篇文章主要介绍了一个抽奖程序,要求一等奖的中奖概率是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;
?>

㈨ php取随机数概率算法

//首先定义概率数组
$Probability["1-10"]=0.6;
$Probability["11-50"]=0.25;
$Probability["51-100"]=0.10;
$Probability["101-200"]=0.05;
//扩大1000倍便于计算
foreach($Probabilityas$k=>$v){
$Probability[$k]=$v*1000;
}

$Num=0;
$Random=rand(1,1000);//生成随机数
foreach($Probabilityas$k=>$v){
if($Num<$Random&&$Random<=$v+$Num){
//进入这里表示随机数在哪一个范围内
$Range=explode("-",$k);
//生成范围区间的随机数
$Result=rand($Range[0],$Range[1]);
echo$Result;
break;
}else{
$Num+=$v;
}
}

阅读全文

与抽奖概率算法php相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163