一个简单抽奖概率算法算法的实现以及如何预防超中

刚写了一个抽奖的算法,拿出来分享一下。准备做一个网页版商城【台服dnf吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:75,439贴子:
刚写了一个抽奖的算法,拿出来分享一下。准备做一个网页版商城
第一次发这种贴。说起来还有点小激动逻辑是 给数据库里的道具设置权重,然后程序读出来 把所有权重加起来再分别用每个物品的权重除以总权重算抽到每个物品的百分比。然后给每个道具根据他们的权重分配对应的数据区间。抽奖的机制是产生一个0到 总权重之间的随机数到哪块区间就是抽到什么奖品 恩对了
还能给奖品设置最大数量,比如一个很值钱的东西
只让人抽到三个
后面的人就在也不让抽到了。这个也实现了如果后面的人抽到有数量限制而且已经抽完的道具就给他下一级的奖品 if(this.allNum == 0){}isHave方法第一行加上这个 想要的就拿去吧。。。。。。。顺便给打一波广告想做官网的GM(防国服,相似度达到百分之99.999可走淘宝)想要的密我。如果吧务想删我的贴提前跟我说下。我吧广告删掉。。。。。。。毕竟码字不容易。谢谢大家了。如果商城做好我可能会分享。。。
drawTest(1).java大小:2.72KB下载:3次转存:2次文件已失效
自己顶一下
然而2分钟过去了
官网多少?
看到java文件了 这判断也是醉了
贴吧热议榜
使用签名档&&
保存至快速回贴&&&java简单的抽奖方法——配置概率(100以内随机数的一个解决方案)用户抽奖的大致思路就是,当用户点击抽奖后,后台随机算出100以内的一个随机数,然后查看该随机数是否在中奖概率范围内。抽奖概率写死的方法:
* 抽奖概率
* @return rand
public static int randomInt() {
int randomNum = new Random().nextInt(100) + 1;
if (randomNum == 1) {
} else if (randomNum &= 2 && randomNum &= 5) {
} else if (randomNum &= 6 && randomNum &= 10) {
} else if (randomNum &= 11 && randomNum &= 50) {
从数据库读取概率配置(本次抽奖分五等奖)
public static int randomInt(LotteryPrizeEntry lotteryPrize) {
//概率不能为空,至少为0
if (lotteryPrize.getFirstPrize() + lotteryPrize.getSecondPrize()
+ lotteryPrize.getThirdPrize() + lotteryPrize.getFourthPrize() + lotteryPrize.getFifthPrize() & 100) {
int randomNum = new Random().nextInt(100) + 1;
List&Integer& list = new ArrayList&Integer&();
list.add(lotteryPrize.getFirstPrize());
list.add(lotteryPrize.getSecondPrize());
list.add(lotteryPrize.getThirdPrize());
list.add(lotteryPrize.getFourthPrize());
list.add(lotteryPrize.getFifthPrize());
int prize = 1; //奖品级数
int num = 0; //存中奖概率数
int num2 = 1;//存中奖概率数
for (Integer i : list) {
if (i &= 1) {
if (randomNum &= num2 && randomNum &= num) {
prize++; //奖级加一
num2 = +i;
中奖概率配置表:BEGIN_TIME & & & &DATE & & & & & & & &开始时间END_TIME & & & & DATE & & & & & & & &结束时间LOTTERY_ISENABLE & & & &NUMBER & & & & & & & & 是否开启 0关闭1开启FIRST_PRIZE & & & &NUMBER & & & & & & & &一等奖概率SECOND_PRIZE & & & & NUMBER & & & & & & & & 二等奖概率THIRD_PRIZE & & & & NUMBER & & & & & & & &三等奖概率FOURTH_PRIZE & & & & NUMBER & & & & & & & & 四等奖概率FIFTH_PRIZE & & & & NUMBER & & & & & & & & 五等奖概率猜你喜欢0个牛币请下载代码后再发表评论精精精精原精精原原原原原原相关分享最近下载最近浏览&LV2&LV7&LV15&LV1&LV2&LV3&LV2&LV2&LV1&LV2扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友活动抽奖算法 | 关于活动抽奖算法逻辑的一些思考、刮刮卡、大转盘等
最近一直在处理抽奖活动相关的内容,计划过段时间重构公司的一套旧的活动系统,在此记载下自己对抽奖算法逻辑的一些思考。先列举一下抽奖活动逻辑相关的影响因素:活动相关:活动持续时间、活动参与人数奖品相关:奖品总数量、各奖品权重、谢谢参与用户相关:抽奖次数、用户刷奖做抽奖业务时,需要考虑到的几个关键点:活动持续多长时间?活动预计参与人数有多少?各类奖品在整个活动过程中出现的分布情况是怎样的?如何保证所有奖品不被短时间之内抽完?如何保证用户不能恶意刷奖?同时,抽奖类活动往往伴随着高峰值、大流量等等同时出现,在用户流量过大时如何进行合理规划?来分析一下抽奖逻辑:既然是“抽奖”,就会存在一定的概率问题,抽奖算法,实际上就是在考虑如何最有效的确保用户获得奖品的概率相对公平、确保奖品能够持续到活动结束。对于不限制奖品数量的抽奖活动,抽奖逻辑相对简单,通过“奖品权重”,很容易做到每个用户抽到奖品的概率和不中奖的概率基本稳定。然而在实际业务中,稍微复杂一些的抽奖系统,往往会对其中的某几个奖品进行数量的限定,此时,再仅仅使用“奖品权重”这一个维度的抽奖限定就有些捉襟见肘了。常见的,如果一个抽奖活动需要持续五天的时间,奖品数量固定,同时奖品出现的概率固定,那么很容易出现的一种状况就是,在活动的第一天,奖品就消耗殆尽了,而接下来的四天,活动依然要进行,并且如果大奖刚开始就被玩家抽中,这个活动的诱惑力也会大打折扣。所以,在常见的抽奖活动中,我们需要从奖品数量、活动持续时间、奖品出现概率、参与用户数量等多个维度来考虑抽奖算法。思路一:限制每日最大奖品数量想要保证“奖品维持到活动结束”,最简单的思路就是根据活动天数,限制每日奖品被抽中的最大数量,每当用户根据概率计算,抽中限定奖品时,逻辑判断该奖品当日是否已超量,若已达当日最大数量则将奖品置为其他不限量奖品或谢谢参与。思路二:构建活动奖品池,缓慢释放奖品入池构建一个活动奖品池,按小时拆分活动持续时间,每小时一次,按照奖品权重概率向奖品池中丢入奖品,确保奖品数量持续到活动结束。这样做,可以对活动奖品的发放做到有效控制。再细化一些,我们还可以限定具体奖品的发放时间,做到对各奖品出现时间规律的调控。对于抽奖奖品的控制,反正总体思路就是“绑定奖品数量和发放时间,对奖品数量做到除了概率以外的其他干预调控”,确保活动持续进行。
能干的人解决问题,智慧的人绕过问题。茫茫网海,感谢与你相遇! 和我做邻居吧!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
&&&&&&&&&&&&扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
抽奖概率的计算抽奖系统 要给定几个概率,一等奖0.1% 二等奖0.2% 三等奖 0.5% 幸运奖 1% 其余不中奖 如何进行判断这些概率?用什么方法来实现?写一个JAVA的方法实现这个过程如果可以实现 我可以追加分
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
/*\x05 * 下面方法是在考虑奖项有名额限制的情况下\x05 * 暂定一等奖1名 二等奖 2名 3等级3名 幸运奖10名\x05 * 中奖方法适用math.random(1000) \x05 */\x05Integer one = 1;\x05 Integer two = 2;Integer three = 3;\x05Integer lucky = 10;\x05public Integer Lottery(){//返回值:1-一等奖 2-二等奖 3-三等奖 4-幸运奖 0-不中奖\x05\x05Integer ranNum = (int)(Math.random()*1000);\x05\x05System.out.println(ranNum);\x05\x05if(ranNum>=0&&ranNum0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05one--;\x05\x05\x05\x05\x05return 1;\x05\x05\x05\x05}\x05\x05\x05\x05if(two>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05\x05two--;\x05\x05\x05\x05\x05return 2;\x05\x05\x05\x05}\x05\x05\x05\x05if(three>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05\x05three--;\x05\x05\x05\x05\x05return 3;\x05\x05\x05\x05}\x05\x05\x05\x05if(lucky>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05lucky--;\x05\x05\x05\x05\x05return 4;\x05\x05\x05\x05}\x05\x05\x05}\x05\x05\x05\x05\x05\x05if(ranNum>=0&&ranNum0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05\x05two--;\x05\x05\x05\x05\x05return 2;\x05\x05\x05\x05}\x05\x05\x05\x05if(three>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05\x05three--;\x05\x05\x05\x05\x05return 3;\x05\x05\x05\x05}\x05\x05\x05\x05if(lucky>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05lucky--;\x05\x05\x05\x05\x05return 4;\x05\x05\x05\x05}\x05\x05\x05}\x05\x05\x05\x05\x05\x05if(ranNum>=0&&ranNum0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05\x05three--;\x05\x05\x05\x05\x05return 3;\x05\x05\x05\x05}\x05\x05\x05\x05if(lucky>0)\x05\x05\x05\x05{\x05\x05\x05\x05\x05lucky--;\x05\x05\x05\x05\x05return 4;\x05\x05\x05\x05}\x05\x05\x05}\x05\x05\x05\x05\x05\x05if(lucky>0)\x05\x05\x05{\x05\x05\x05\x05lucky--;\x05\x05\x05\x05return 4;\x05\x05\x05}\x05\x05}\x05\x05\x05\x05return 0;\x05}
有一个问题
没考虑到。
这些奖品是存放在数据库的,当抽中奖后,奖品的数量就会减少,当抽完后,那客户也就抽不到这个奖项了。这部分该怎么实现?
你这是用什么语言写的?
怎么我看不懂啊?
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 抽奖随机算法 的文章

 

随机推荐