一种可以适用于固定抽奖时间、未知抽奖人数的随机抽奖算法

一般的抽奖都是使用 rand 按一定几率来确认是否中奖,但是在未知总抽奖人数时中将比率不好安排,很容易出现时间未结束奖就全部抽完了,或者抽奖时间结束奖还有的现象。

照成上面问题的主要原因是在拿未知的总抽奖人数作为抽奖几率的参数,算出来的几率很难正确。但是其实我们手里面还有一个参数可以用来算中奖几率,那就是抽奖时间。我们可以将每一个奖项随机的分配到抽奖时间里面,在某个奖项中奖时间后第一个抽奖的即可中当前奖项。这样避开了抽奖总人数未知的问题。当然,夜间可能没有人或很少有人抽奖,所以需要在总抽奖时间里面减去夜间,或根据夜间抽奖人数少降低分配到夜间的奖项。

大体做法是:
建立一个”中奖时间”表,含有中奖时间、奖励、状态 等字段。

每个奖励分配办法:
奖励数/总抽奖小时 = 平均每小时中奖数

for (int h = 0;h<总抽奖小时;h++) { for (int i=0;i<每小时中奖次数;i++) { 本次中奖时间 = 抽奖开始时间 + h小时 + Random(0,60*60*1000) } } 懒得写了,大体意思写出来即可。

  WordPress › 错误