有哪些经典的抽奖算法
发布网友
发布时间: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做在哪个范围就是哪个中奖了哦!简单吧?