BEGIN;
需求:
如下中奖率
一等奖 5%
二等奖 30%
安慰奖 65%
设计:
以随机数实现,并做统计防线,控制概率的准确性
1、以100个数字为基准,实现百分比数。
一等奖 {1,2,3,4,5}
二等奖 {6,7,...,29,30}
安慰奖 {31,32,...,99,100}
2、每次抽奖,获取一个1-100的随机数,并判断属于哪个奖品
if(r > 30) 安慰奖
else if(r > 5) 二等奖
else 一等奖
3、统计此次中奖的奖品已经中奖的人数,以及当前抽奖的总人数,计算出当前此次奖品的已中概率,判断是否还能再中此类奖品,若不能,则默认给安慰奖,假设当前中奖的奖品为 二等奖
当前二等奖中奖率 = 当前中二等奖奖品总数 / 当前抽奖总数
if(当前二等奖中奖率 < 配置概率)
// 可以中二等奖奖品
else
// 二等奖奖品已经中完,默认给中安慰奖
例:
当前中二等奖奖品总数: 26
当前抽奖总数:87
当前二等奖中奖率 = 26 / 87 = 0.2988 = 29.88%
0.2988 < 0.3
结果:中奖
例:
当前中二等奖奖品总数: 27
当前抽奖总数:87
当前二等奖中奖率 = 27 / 87 = 0.3103 = 31.03%
0.3103 > 0.3
结果:已经不能再中奖,默认给安慰奖
END;
技术交流