请问谁知道PHP双色球中奖概率算法的算法???

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法。用法很简单,代码里有详细注释说明,一看就懂
&?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选
08:58&&&[]
中七个奖项的v的总和为100,如果v的值为1,则代表中奖几率为1%,依此类推。 关于中奖概率算法,本站文章:PHP+jQuery实现翻板抽奖有介绍经典的概率算法,本文直接将代码拿来。 &function&getRand($proArr)&{&&nbsp
14:30&&&[]
刚开始只有一个抽奖大转盘活动 有如下抽奖规则
每个用户每天可以抽3次 新客第一次抽奖100%中奖 新客接下来抽奖只能中红包奖品 中了优惠券一个月内只能中红包 中了实物半年内只能中红包
对应的数据库表设计为 create table lottery_activity( id int
20:27&&&[]
(); } } } return&shootA } & & 参考 转轮抽奖的算法实现-Java-第七城市 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法&-&PHP教程_PHP编程_PHP开发技术文章&-&红黑联盟 PHP中奖概率的抽奖
23:31&&&[]
谁做过微信的大转盘、刮刮卡、一站到底啊?给个教程或者源码,就是公众平台开发者模式下面的。百分求
回复讨论(解决方案)
微信的游戏吗?嘿嘿,好新啊。这个,赚钱的东西,你拿百分求????
要么你拿个百万元人民币求吧。
微信的游戏吗?嘿嘿,好新啊。这个,赚钱的东西,你拿百分求????
-16:14&&&[]
1、unity中要实现旋转一个gameobject,我们需要改变它的transform下对应的Rotation,由于我们的大转盘是2D的视角,所以我们首先需要明确大转盘旋转的方向是旋转Rotation的Z。 2、如何实现大转盘由旋转快到慢,再到旋转指定为位置停下。查看了unity的脚本可以找到如下
18:45&&&[]
10:47&&&[]
; charset=utf-8& /& &title&jQuery九宫格大转盘抽奖&/title& &style& #lottery{width:570height:510margin:0border:4px solid
19:39&&&[]
弹出获奖信息提示
这是参考效果,我们分析自己的大概实现:
同样上下2部分 点击指针转动,不过是指针动 转动一定圈数停止 根据指向弹出获奖信息 设置抽奖次数,假如只能三次 设置不同奖项中奖概率
在最后我们在写一个九宫格大转盘 & 二.如何转起来 转就是css3的2d旋转处理,css3
16:53&&&[]
名称,奖品名额,奖品概率,
我中了6个奖项中一个奖,就相应减去一个名额
中奖时候,需要判断是否中奖名额是否存在
这个是否可以实现,跪求算法,java方面&&
回复讨论(解决方案)
急急急,在线等都没有人来给个回复的吗
要统计用户吧?没用户你给谁抽奖啊
17:44&&&[]
1、先来张幸运大抽奖效果图
2、Default.aspx页面代码
&span style=&font-family:Microsoft YaHfont-size:14&&&%@ Page Language=&C#&quot
10:26&&&[]
写抽奖无非就是从概率入手,每个层次的奖的概率是该权重总权重的百分比 $arr = array( array('prize'=&'first', 'weight'=&10), array('prize'=&'second','weight'=&10), array
23:02&&&[]PHP中奖概率的抽奖算法程序代码
PHP中奖概率的抽奖算法程序代码
| 时间: 19:27:02 | 阅读数:
[导读] 初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序:该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分抽奖算法需
初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序:该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分
抽奖算法需要满足的需求如下:1.可以控制中奖的概率2.具有随机性3.最好可以控制奖品的数量4.根据用户ID或者ip、手机号、QQ号等条件限制抽奖次数初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序:该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分:
&?php& /**&* &*&* @lanfengye &zibin_&&*/class Choujiang extends Action {&&&& //抽奖的开始时间&&& var $begin_time=& 14:00:00&; //开始时间& 0-不限制&&& //抽奖的结束时间&&& var $stop_time=&0&;& //结束时间& 0-不限制&&&&& &&& //本次抽奖的奖项信息,必须按照从大到小的顺序进行填写,id为奖次,prize为中奖信息,v为中奖概率,num为奖品数量&&& //需要注意的是,该处也必须包含不中奖的信息,概率从小到大进行排序&&& var $prize_arr = array(&&&&&&& '0' =& array('id' =& 1, 'prize' =& '44元购买1G/年空间', 'v' =& 1,'num'=&1),&&&&&&& '1' =& array('id' =& 2, 'prize' =& '55元购买1G/年空间', 'v' =& 2,'num'=&2),&&&&&&& '2' =& array('id' =& 3, 'prize' =& '66元购买1G/年空间', 'v' =& 5,'num'=&2),&&&&&&& '3' =& array('id' =& 4, 'prize' =& '77元购买1G/年空间', 'v' =& 10,'num'=&3),&&&&&&& '4' =& array('id' =& 5, 'prize' =& '88元购买1G/年空间', 'v' =& 15,'num'=&4),&&&&&&& '5' =& array('id' =& 6, 'prize' =& '99元购买1G/年空间', 'v' =& 67,'num'=&10),&&& );&&&& &&&& //首页显示方法&&&& &&& public function index(){&&&&&&& //连接,去获取本次中奖的人员名单&&&&&&& $Choujiang=M('Choujiang');&&&&&&& $this-&assign('list', $Choujiang-&where(&rid&0&)-&order('id desc')-&());&&&&&&& unset($Choujiang);&&&&&&&&& &&&&&&& //在首页中显示抽奖的开始时间&&&&&&& $this-&assign('begin_time',$this-&begin_time);&&&&&&&&& &&&&&&& $this-&display();&&& }&&&&& & &&&&& &&& /**&&&& * 生成中奖信息,ajax进行请求该方法,需要客户填写QQ号码&&&& */&&& public function make() {&&&&&&& $qq_no=& trim($_POST['qq_no']);&&&&&&& import('ORG.Util.Input');&&&&&&& $qq_no=Input::getVar($qq_no);&&&&&&&&& &&&&&&& if(empty($qq_no)){&&&&&&&&&&& $this-&ajaxReturn(1, '请正确填写QQ号码!');&&&&&&&&&&&&&&&&&& }&&&&&&&&& &&&&&&& if(!empty($this-&begin_time) && time()&($this-&begin_time)){&&&&&&&&&&& $this-&ajaxReturn(1, '抽奖还没有开始,开始时间为:'.$this-&begin_time);&&&&&&&&&&&&&&&&&& }&&&&&&&&& &&&&&&& if(!empty($this-&stop_time) && time()&strtotime($this-&stop_time)){&&&&&&&&&&& $this-&ajaxReturn(1, '本次抽奖已经结束,结束时间为:'.$this-&stop_time);&&&&&&&&&&&&&&&&&& }&&&&&&&&& &&&&&&&& //获取奖项信息数组,来源于私有成员&&&&&&& $prize_arr=& $this-&prize_&&&&&&&&& &&&&&&&
($prize_arr as $key =& $val) {&&&&&&&&&&& $arr[$val['id']] = $val['v'];&&&&&&& }&&&&&&& //$rid中奖的序列号码&&&&&&& $rid = $this-&get_rand($arr); //根据概率获取奖项id&&&&&&&&& &&&&&&& $str = $prize_arr[$rid - 1]['prize']; //中奖项 &&&&&&&&& &&&&&&& $Choujiang=M('Choujiang');&&&&&&&&& &&&&&&&&&&& //从中获取特定QQ号已经参加抽奖的次数,如果大于等于3则提示次数用完&&&&&&& if($Choujiang-&where(&qq_no='{$qq_no}'&)-&count()&=3){&&&&&&&&&&& $str='您3次抽奖机会已经用完!';&&&&&&&&&&& $rid=0;&&&&&&&&&&& //从数据库中获取特定奖项序号的次数,大于等于设置的最大次数则提示奖品被抽完,如果需要一直中最后一个纪念奖,则修改该处即可&&&&&&& }elseif ($Choujiang-&where(&rid={$rid}&)-&count()&=$prize_arr[$rid-1]['num']) {&&&&&&&&&&& $str='很抱歉,您所抽中的奖项已经中完!';&&&&&&&&&&& $rid=0;&&&&&&& }&&&&&&& //生成一个用户抽奖的数据,用来记录到数据库&&&&&&& $data=array(&&&&&&&&&&& 'rid'=&$rid,&&&&&&&&&&& 'pop'=&$str,&&&&&&&&&&& 'qq_no'=&$qq_no,&&&&&&&&&&& 'input_time'=&time()&&&&&&& );&&&&&&& //将用户抽奖信息数组写入数据库&&&&&&&&& &&&&&&& $Choujiang-&add($data);&&&&&&& unset($Choujiang);&&&&&&&&& &&&&&&&& //ajax返回信息&&&&&&& $this-&ajaxReturn(1, $str);&&& }&&&&& &&& /**&&&& * 根据概率获取中奖号码&&&& */&&& private function get_rand($proArr) {&&&&&&& $result = '';&&&&&&& //概率数组的总概率精度 &&&&&&& $proSum = array_sum($proArr);&&&&&&& //概率数组循环 &&&&&&& foreach ($proArr as $key =& $proCur) {&&&&&&&&&&& $randNum = mt_rand(1, $proSum);&&&&&&&&&&& if ($randNum &= $proCur) {&&&&&&&&&&&&&&& $result = $&&&&&&&&&&&&&&&&&&&&&&&&&& } else {&&&&&&&&&&&&&&& $proSum -= $proC&&&&&&&&&&& }&&&&&&& }&&&&&&& unset($proArr);&&&&&&& return $&&& }&&&&& }& & & ?&
该算法简单使用,并发访问性能非常好,稍加改动就可以用于各种场合,结合用户登录等信息可有效控制每个人的抽奖次数。将开始和结束之间更改为数组,就可以完善成为每天特定时间抽奖的程序。
手机扫描下方二维码,关注php100官方微信。
同步官网每日更新,为您带来随时随地的资讯与技术信息。更有不定期的互动抽奖活动,赢取实用贴心的小礼物。
除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接原文地址:
友情链接与合作伙伴
粤ICP备号-3下次自动登录
现在的位置:
& 综合 & 正文
paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
paip.刮刮卡砸金蛋抽奖概率跟核心流程
#---抽奖算法需要满足的需求如下:
1.可以控制中奖的概率
2.具有随机性
3.最好可以控制奖品的数量
4.根据用户或者、手机号、号等条件限制抽奖次数
初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的:
关联的数据结构
,[activityId]
,[awardName]
,[awardCount]
作者 老哇的爪子 Attilax 艾龙,
转载请注明来源: http://blog.csdn.net/attilax
#---抽奖核心流程
//判断每用户每个活动的最大数字
if (bingoedNum(uid,actid.toString()) &= perUserMaxBigonNum) {
StartAwd()
if (awd == null)
// 判断奖品是否送完
if (awdOver(awd)) {
Reutnr awd.
#---问题更好的算法
网上的算法是没问题的就是理解起来麻烦的不是一个真实的阶段式抽取的方法
例如俄们子有一个奖品算法的时候儿子要不个概率算呱走兰
有个奖品子要不个哪给挂走兰木
public static Awardx getBingoAwd(List&Awardx& li) {
int rdmAwdIndex_may=randomx.random(li.size()-1);
System.out.println("may index::"+rdmAwdIndex_may);
Awardx awd=(Awardx) li.get(rdmAwdIndex_may);
int rdm=randomx.random(100);
core.log("--o42910: rdmAwdIndex_may--rdm--awd.prbblt"+String.valueOf(rdmAwdIndex_may)+"--"+String.valueOf(rdm)+"--"+String.valueOf(awd.prbblt));
if(rdm&awd.prbblt)
#---实际使用的扩展抽奖算法(带奖品送完判断和每用户最大中奖判断
protected Awardx startAward(Integer actid, String uid) {
if (bingoedNum(uid,actid.toString()) &= perUserMaxBigonNum) {
List&ActAward& li = AwdListByActid(actid);
List&Awardx& li_fnl = listUtil.map_generic(li,
new Func_4SingleObj&ActAward, Awardx&() {
public Awardx invoke(ActAward o) {
ActAward thisAwd =
Awardx awd = new Awardx();
awd.id = thisAwd.getId();
awd.name = thisAwd.getAwardName();
awd.prbblt = thisAwd.getRate();
Awardx awd = com.attilax.award.AwdSvs.getBingoAwd(li_fnl);
if (awd == null)
if (awdOver(awd)) {
#-------网上的抽奖算法Php
* 根据概率获取中奖号码
private function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key =& $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum &= $proCur) {
$result = $
$proSum -= $proC
unset($proArr);
#----java版本的
* @category 获取中奖概率
private static ActAward getAwardRand(List&ActAward& awardList) {
ActAward shootAward =
/*return shootAward = awardList.get(0);*/
if (awardList != null && awardList.size() & 0) {
int size = awardList.size();
int seed = 10000;
// 中奖总概率
for (ActAward aa : awardList) {
seed += aa.getRate();
// 循环奖项
for (int i = 0; i & i++) {
ActAward one = awardList.get(i);
Random rand = new Random();
// 获取之间的概率
int randNum = rand.nextInt(seed);
<("随机概率
if (randNum &= i) {
shootAward =
seed -= one.getRate();
return shootA
转轮抽奖的算法实现第七城市
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法 教程编程开发技术 红黑联盟
PHP中奖概率的抽奖算法程序
&&&&推荐文章:
【上篇】【下篇】php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
&* 经典的概率算法,
&* $proArr是一个预先设置的数组,
&* 假设数组为:array(100,200,300,400),
&* 开始是从1,1000
这个概率范围内筛选第一个数是否在他的出现概率范围之内,&
&* 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
&* 这样 筛选到最终,总会有一个数满足要求。
&* 就相当于去一个箱子里摸东西,
&* 第一个不是,第二个不是,第三个还不是,那最后一个一定是。
&* 这个算法简单,而且效率非常 高,
关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。
function get_rand($proArr) {&
& & $result = '';
//概率数组的总概率精度&
& & $proSum =
array_sum($proArr); &
//概率数组循环&
& & foreach ($proArr as $key
=& $proCur) {&
& $randNum = mt_rand(1,
$proSum);&
& if ($randNum &= $proCur)
& & & $result =
& } else {&
& & & $proSum -=
& & unset ($proArr);
& & return
&* 奖项数组
&* 是一个二维数组,记录了所有本次抽奖的奖项信息,
&* 其中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
& & $pr[] =
$prize_arr[$i]['prize'];&
$res['no'] = $&
print_r($res);&
文章来源:http://www.oschina.net/code/snippet_38
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未中奖的奖项信息一并以JSON数据格式发送给前端页面。
先来看概率计算函数
function get_rand($proArr) {
$result = '';
$proSum = array_sum($proArr);
foreach ($proArr as $key =& $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum &= $proCur) {
$result = $key;
$proSum -= $proCur;
unset ($proArr);
return $result;
上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。
接下来我们通过PHP配置奖项。
$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),
中是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了。
每次前端页面的请求,PHP循环奖项设置数组,通过概率计算函数get_rand获取抽中的奖项id。将中奖奖品保存在数组res[′yes′]中,而剩下的未中奖的信息保存在res[‘no’]中,最后输出json个数数据给前端页面。
foreach ($prize_arr as $key =& $val) {
$arr[$val['id']] = $val['v'];
$rid = get_rand($arr);
$res['yes'] = $prize_arr[$rid-1]['prize'];
unset($prize_arr[$rid-1]);
shuffle($prize_arr);
for($i=0;$i&count($prize_arr);$i++){
$pr[] = $prize_arr[$i]['prize'];
$res['no'] = $pr;
echo json_encode($res);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:212次
排名:千里之外}

我要回帖

更多关于 大转盘中奖概率算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信