总权重为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就能控制求采纳
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)