首页 > 编程语言 > 详细

一种抽奖转盘算法

时间:2020-06-06 19:38:39      阅读:54      评论:0      收藏:0      [点我收藏+]
基本思路,概率总和不需要为100%,首先先算出所有的概率总和,然后随机一个值在
0到总和之间,计算这个值落入的区间是在哪个位置。这种算法较为平均。
public static Integer duageAward(List<Double> turntables){
    Double sumPbi = 0.0;
    for (Double n: turntables){
        sumPbi += n;
    }

    Integer turntableId = null;
    Double rsel = RandomUtils.nextDouble(0,sumPbi);
    for (int i = 0;i < turntables.size();i++){
        if (turntables.get(i).compareTo(rsel)<0){
            rsel = rsel - turntables.get(i);
        }else{
            turntableId = i;
            break;
        }
    }
    return turntableId;
}

public static void main(String[] args) {
    List<Double> nums = new ArrayList<>();
    nums.add(10.1);
    nums.add(20.3);
    nums.add(99.92);
    nums.add(87.80);
    nums.add(99.90);
    nums.add(99.91);
    int []arr=new int[6];
    for (Long i = 0L;i<100000000L;i++){
        int idx = duageAward(nums);
        arr[idx] = arr[idx] + 1;
    }
}

  

一种抽奖转盘算法

原文:https://www.cnblogs.com/forbeat/p/13055869.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!