抽奖功能实现(纯算法)

抽奖功能实现(纯算法),第1张

简单的将权重就是某个奖品的中奖率,总权重就是所有的中奖率相加得到的总数(当然如果是抽奖的话所有奖品加起来最高也就是100,因为100就是百分之百中奖咯)。

总权重为10(1+2+3+4),那么怎么做到按权重随机呢?根据10随机出一个整数,假如为随机出来的是2.然后依次和权重相减,比如 2(随机数)-1(A的权重) = 1 ,然后 1(上一步计算的结果)-2(B的权重) = -1 ,此时 -1 <0 ,那么则调用B(也就是中奖的奖品是B咯),其他的以此类推,还有一点比较重要的就是将 每个权重(中奖率)x10000(或者更高) ,然后随机的数字在 总权重(所有中奖率相加)*10000 ,这个概率会更均匀分布。

可以预定义一个数,然后根据百分比计算各自的门槛值。如下: (注意:概率需要从小到大排列,因为用if判断的问题。) #define BASE_NUMBER 32767 #define BASE_DIV 100 #define RATE1 1 #define RATE2 5 #define RATE3 20 #define RATE4 74 int var1, var2, var3, var4main() { var1 = (int)((float)BASE_NUMBER*RATE1/BASE_DIV)var2 = (int)((float)BASE_NUMBER*RATE2/BASE_DIV)var3 = (int)((float)BASE_NUMBER*RATE3/BASE_DIV)var4 = (int)((float)BASE_NUMBER*RATE4/BASE_DIV)..... if ( rand <= var1 ) { // 第一种 } else if ( rand <= var2 ) { // 第二种 } else if ( rand <= var3 ) { // 第三种 } else { // 第四种 } ... } 如上,只需要改变BASE_DIV 和RATE1 2 3 4就能控制

求采纳


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11525381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存