前言
只要是营销的场景,肯定逃不脱抽奖,研究好抽奖可以说是必修课之一,算法也是多种多样,这次以奖品的权重来抽奖。
奖品设置
奖品实体必须含有两个字段,一个用于区分的奖品名称/ID;一个奖品权重
请看表格,进行如下设置
抽奖的逻辑可以用下面这张图表示
算法
1 | import java.util.ArrayList; |
打开终端,对PrizeTest进行编译,然后运行1
2javac PrizeTest.java
java PrizeTest
得出的结果
结束。。。
每个奖品名称的使用数量为:
名称1:9
名称2:26
名称3:25
名称4:40
设置的奖品数量只有100,计算的结果基本符合预期,数字越大,越准确。
其他情况
如果预想中奖率是100%,那么10个奖品只能抽奖10次,所以还要根据实际情况设置每种奖品数量和权重。
如果需要设置中奖率不为100%,可以添加一个“伪奖品”进行站位,为其设置权重,那么抽到这个“伪奖品”的概率就是不中奖的概率。
这个是在奖品充足的时候情况下,如果在抽奖活动中某个奖品抽完了,做个判断,即此奖品剩余数量为0,则重新抽取一次,一直到抽到其他还有剩余的奖项为止。
参考的资料是要联动数据库的,这里做了一些简单的处理,理解核心业务逻辑。
参考资料:https://blog.csdn.net/a46788304/article/details/65437754