扫码关注官方订阅号
1.现在有一个项目要求是这样的:奖池有A、B、C三种商品,数量分别为n1, n2, n3, 时间为三周用户点击后随机抽奖,如果抽中可以在三种奖品中随机获得一种。[补充:每人只有一次抽奖机会]要求第一周随机抽奖结果是获奖人数必须达到(n1,n2,n3)%80左右。后面的两周抽完剩下的。
大家觉得怎么做比较好?
业精于勤,荒于嬉;行成于思,毁于随。
说一下我的想法:我这里统一把三种奖品划分为一种做整理,后面自己要实现的话再随机分配什么奖品好了
80/200
80/7/200
memcache
incre
redis
但是,按照如上的思路只是做了几率控制,并不意味着中奖的人数就一定能达到题主要求的获奖人数必须达到(n1,n2,n3)%80左右,所以我们是否可以考虑让中奖的几率随着时间和中奖人数而递减,前一周是抽80个,每天应该抽中7个左右,比如我设置前3个人进来的中奖几率是100%,接下来2个的几率是80%,再接下来...根据memcache来做判断
获奖人数必须达到(n1,n2,n3)%80左右
100%
80%
一个奖品分两个队列,如1_jx_1(第一期奖品奖项1)、2_jx_1(第二期奖品奖项1),然后队列里面放奖品的信息什么的。
$1_jx_1= array( array('jx'=>'1','name'=>'一等奖','sn'=>'20170401401'), array('jx'=>'1','name'=>'一等奖','sn'=>'20170401402'), array('jx'=>'1','name'=>'一等奖','sn'=>'20170401403'), ...... ); $1_jx_2= array( array('jx'=>'1','name'=>'一等奖','sn'=>'20170401411'), array('jx'=>'1','name'=>'一等奖','sn'=>'20170401412'), array('jx'=>'1','name'=>'一等奖','sn'=>'20170401413'), ...... );
用户点击页面,生成奖品,第一周去队列一取,后面两周去队列二取奖品,队列出队空,就直接返回谢谢参与。
用户点击页面,算法生成奖项再队列里面出队,这是一个办法。
以前我是这么搞的,不知道好不好。我线下根据算生法,生成了好几万的领奖数据,把这些记录放到redis里面,用户点击页面,直接队列里面出队一个奖给他,省了算法的部分。也就是说只要两个队列,只要队列一空,就谢谢参与。这样子速度是快了些,缺点是前确定了奖品概率,后期不好改动。
$1jx= array( array('jx'=>'1','name'=>'一等奖','sn'=>'20170401401'), array('jx'=>'0','name'=>'谢谢参与','sn'=>''), array('jx'=>'0','name'=>'谢谢参与','sn'=>''), array('jx'=>'0','name'=>'谢谢参与','sn'=>''), array('jx'=>'1','name'=>'一等奖','sn'=>'20170401403'), ...... ); $1jx=array( array('jx'=>'0','name'=>'谢谢参与','sn'=>''), array('jx'=>'0','name'=>'谢谢参与','sn'=>''), ...... array('jx'=>'1','name'=>'一等奖','sn'=>'20170401413'), ...... );
这个问题有点问题!! 作为一个处女座强迫症患者, 我想表达的是, 人数固定么?
中奖概率 = (中奖名额)/(参与人数)
"要求第一周随机抽奖结果是获奖人数必须达到(n1,n2,n3)%80左右。" 指的是(n1 + n2 + n3)的80%左右吗?
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
说一下我的想法:
我这里统一把三种奖品划分为一种做整理,后面自己要实现的话再随机分配什么奖品好了
我们假设每天有200人来抽取,奖品总共有100个,根据题主的意思,也就是说我们前一周只有80个奖品能分配出去,即中奖几率是
80/200,但是考虑到不能让用户第一天就抽完,所以我们把奖品的中奖几率平均分配到每天,所以此时每人每天的中奖几率是80/7/200,可以考虑使用memcache的incre来统计中奖名额,如果要考虑并发,可以考虑redis的队列.剩下的两周的几率如上思路所示.但是,按照如上的思路只是做了几率控制,并不意味着中奖的人数就一定能达到题主要求的
获奖人数必须达到(n1,n2,n3)%80左右,所以我们是否可以考虑让中奖的几率随着时间和中奖人数而递减,前一周是抽80个,每天应该抽中7个左右,比如我设置前3个人进来的中奖几率是100%,接下来2个的几率是80%,再接下来...根据memcache来做判断一个奖品分两个队列,如1_jx_1(第一期奖品奖项1)、2_jx_1(第二期奖品奖项1),然后队列里面放奖品的信息什么的。
用户点击页面,生成奖品,第一周去队列一取,后面两周去队列二取奖品,队列出队空,就直接返回谢谢参与。
用户点击页面,算法生成奖项再队列里面出队,这是一个办法。
以前我是这么搞的,不知道好不好。我线下根据算生法,生成了好几万的领奖数据,把这些记录放到redis里面,用户点击页面,直接队列里面出队一个奖给他,省了算法的部分。
也就是说只要两个队列,只要队列一空,就谢谢参与。这样子速度是快了些,缺点是前确定了奖品概率,后期不好改动。
这个问题有点问题!!
作为一个处女座强迫症患者, 我想表达的是, 人数固定么?
中奖概率 = (中奖名额)/(参与人数)
"要求第一周随机抽奖结果是获奖人数必须达到(n1,n2,n3)%80左右。" 指的是(n1 + n2 + n3)的80%左右吗?