有哪些经典的抽奖算法

发布网友 发布时间:2022-04-22 16:43

我来回答

2个回答

热心网友 时间:2023-08-17 21:47

常见的有两种

第一类是常见的有等级的抽奖活动,如一等、二等、三等奖等等

// 分别为一、二、三、四等将的奖品数量,最后一个为未中奖的数量。  
    private static final Integer[] lotteryList = {5, 10, 20, 40, 100};  
  
    private int getSum() {  
        int sum = 0;  
        for (int v : lotteryList) {  
            sum += v;  
        }  
        return sum;  
    }  
  
    private int getLotteryLevel() {  
        Random random = new Random(System.nanoTime());  
        int sum = getSum();  
        for (int i = 0; i < lotteryList.length; ++i) {  
            int randNum = Math.abs(random.nextInt()) % sum;  
            if (randNum <= lotteryList[i]) {  
                return i;  
            } else {  
                sum -= lotteryList[i];  
            }  
        }  
        return -1;  
    }

第二类是不分等级的抽奖活动,仅需要参与人数与奖品总数,各奖品中奖概率相等。

//另一种抽奖算法,用于公司抽奖,即总参与人数与奖品数固定。  
    private static final int lotteryNum = 75;  
    private static final int total = 175;  
    private static Set<Integer> lotterySet = new HashSet<Integer>();  
    static {  
        for (int i=1; i <= lotteryNum; ++i) {  
            lotterySet.add(total*i/lotteryNum);  
        }  
    }  
    private int getLotteryNum2() {  
        Random rand = new Random(System.nanoTime());  
        int randNum = Math.abs(rand.nextInt()) % total;  
        if (lotterySet.contains(randNum)) {  
            return randNum*lotteryNum/total;  
        }  
        return -1;  
    }

热心网友 时间:2023-08-17 21:48

这是个很简单的数学问题,在概率上叫做平均分布,计算机的随机种子函数一般都是提供平均分布的随机数,所以问题可以直接这样解决。
1定义一个0-99的随机种子 R
2划分你的5个奖区范围
a 0-1
b 1-1
c 1-3
d 3-6
e 6-99

随机种子R做在哪个范围就是哪个中奖了哦!简单吧?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com