概述
文章目录
- 需求背景
- 设计思路
- 代码实现
- 定义奖品及中奖概率
- 执行抽奖
- 中奖率测试
- 测试结果数据
本文逻辑思想比较简单,旨在了解后端如何设计抽奖以及控制抽奖概率。
需求背景
现在奖品池有如下奖品:
序号 | 名称 | 中奖率 |
---|---|---|
0 | 代金券10元 | 20% |
1 | 代金券50元 | 14% |
2 | 蓝牙耳机 | 10% |
3 | Switch游戏机 | 5% |
4 | iPhone 13Pro | 1% |
5 | 谢谢参与 | 50% |
需要设计一个抽奖程序,保证最终的抽奖结果近可能贴近每个奖品的中奖率。
设计思路
首先看看现实生活中的抽奖,如大转盘
可以看到每个奖品的中奖概率很大程度决定于中奖区域面积占比。
借鉴线下大转盘抽奖思想,是否能应用到我们的抽奖程序里面呢?
将上面的圆盘展开可以得到如下图形:
即:
- 在区间[0,20]为抽中【代金券10元】
- 在区间(20,34]为抽中【代金券50元】
- 在区间(34,44]为抽中【蓝牙耳机】
- 在区间(44,49]为抽中【Switch游戏机】
- 在区间(49,50]为抽中【iPhone 13Pro】
- 在区间(50,100]为抽中【谢谢参与】
基于以上思路,我们可以生成一个0~100的随机数,判断这个随机数落在哪个区间,即抽中哪个区间的奖品。
代码实现
定义奖品及中奖概率
执行抽奖
中奖率测试
测试结果数据
抽奖1000次 | 抽奖5000次 | 抽奖10000次 | 抽奖20000次 | 抽奖50000次 | 抽奖100000次 |
---|---|---|---|---|---|
代金券10元 中奖次数:225,中奖率:22.5% | 代金券10元 中奖次数:1080,中奖率:21.6% | 代金券10元 中奖次数:2117,中奖率:21.1% | 代金券10元 中奖次数:4237,中奖率:21.1% | 代金券10元 中奖次数:10517,中奖率:21.0% | 代金券10元 中奖次数:20892,中奖率:20.8% |
代金券50元 中奖次数:162,中奖率:16.2% | 代金券50元 中奖次数:729,中奖率:14.5% | 代金券50元 中奖次数:1341,中奖率:13.4% | 代金券50元 中奖次数:2756,中奖率:13.7% | 代金券50元 中奖次数:6983,中奖率:13.9% | 代金券50元 中奖次数:13876,中奖率:13.8% |
蓝牙耳机 中奖次数:97,中奖率:9.7% | 蓝牙耳机 中奖次数:489,中奖率:9.7% | 蓝牙耳机 中奖次数:1015,中奖率:10.1% | 蓝牙耳机 中奖次数:1988,中奖率:9.9% | 蓝牙耳机 中奖次数:4935,中奖率:9.8% | 蓝牙耳机 中奖次数:9993,中奖率:9.9% |
Switch游戏机 中奖次数:39,中奖率:3.9% | Switch游戏机 中奖次数:278,中奖率:5.5% | Switch游戏机 中奖次数:500,中奖率:5.0% | Switch游戏机 中奖次数:1032,中奖率:5.1% | Switch游戏机 中奖次数:2421,中奖率:4.8% | Switch游戏机 中奖次数:4914,中奖率:4.9% |
iPhone 13Pro 中奖次数:13,中奖率:1.3% | iPhone 13Pro 中奖次数:47,中奖率:0.9% | iPhone 13Pro 中奖次数:109,中奖率:1.0% | iPhone 13Pro 中奖次数:187,中奖率:0.9% | iPhone 13Pro 中奖次数:506,中奖率:1.0% | iPhone 13Pro 中奖次数:1069,中奖率:1.0 |
谢谢参与 中奖次数:464,中奖率:46.4% | 谢谢参与 中奖次数:2377,中奖率:47.5% | 谢谢参与 中奖次数:4918,中奖率:49.1% | 谢谢参与 中奖次数:9800,中奖率:49.0% | 谢谢参与 中奖次数:24638,中奖率:49.2% | 谢谢参与 中奖次数:49256,中奖率:49.2% |
对比一开始理论“中奖率扇形图”可以看出,实际中奖率基本保持稳定且高度接近预期的各奖品中奖率。
相关代码请参考:一个简单的Java抽奖程序
最后
以上就是灵巧帽子为你收集整理的一个简单的Java抽奖程序的全部内容,希望文章能够帮你解决一个简单的Java抽奖程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复