有哪些经典的抽奖算法
发布网友
发布时间: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做在哪个范围就是哪个中奖了哦!简单吧?
有哪些经典的抽奖算法
第一类是常见的有等级的抽奖活动,如一等、二等、三等奖等等 // 分别为一、二、三、四等将的奖品数量,最后一个为未中奖的数量。 private static final Integer[] lotteryList = {5, 10, 20, 40, 100}; private int getSum() { int sum = 0; for (int v : lotteryList)...
抽奖奖品概率的算法
else { // 第四种} 通过调整RATE1、RATE2、RATE3和RATE4的值,可以灵活地改变各个奖品的中奖概率。这种方法简单直观,易于实现和调整,适用于多种抽奖场景。需要注意的是,为了确保概率计算的准确性,必须确保RATE1、RATE2、RATE3和RATE4的值从小到大排列。这样可以避免在if语句中出现逻辑错误,确保程...
抽奖算法与流程设计
首先,抽奖算法的核心在于处理动态的奖品种类和概率。将概率转换为整数,通过随机数确定获奖,例如,ABC三种奖品,每种的概率为0.3,转换后范围为1-9。然而,这会导致实际中奖概率与设定不符,所以还需增加一个谢谢参与的概率,使得随机数范围扩展到1-10。如果增加一个概率极小的奖品D,随机数范围将变...
2021年年会JS抽奖算法思路!
方法一:直接抽取 生成1至62的数字数组,随机抽取10个不重复的数字。此方法直观,操作简单,但需要进行10次splice操作。方法二:先洗牌再抽取 将所有数字进行洗牌,一次抽取10个数字。此方法避免了重复抽取,但存在冗余排序,且不支持连续抽奖。优化版:无需洗所有牌 只需循环10次抽取,无需排序全部62个...
抽奖奖品概率的算法
可以预定义一个数,然后根据百分比计算各自的门槛值。如下: (注意:概率需要从小到大排列,因为用if判断的问题。) #define base_NUMBER 32767 #define base_DIV 100 #define RATE1 1 #define RATE2 5 #define RATE3 20 #define RATE4 74int var1, var2, var3, var4; main() { var1 = ...
EXCEL抽奖问题的算法
(A2<>"")*(A2>2),IF(INT(RAND()*4+1)=1,"奖品",1),"")A3输入=IF(AND(A2>2,A2<>""),A2-3+ISNUMBER(B2),"")C3输入=SUM((B1:B1000<>"")*1) shift+enter+ctrl 三键结束 D3输入=COUNTIF(B1:B1000,"奖品")将B2,A3分别下拉填充。这样,在B1中输入原有的券数就可以了。
c# 如何实现抽奖转盘算法
每次抽的时候分配一个唯一的号码,就不可能同时抽到一个奖了呀,所谓的转盘只不过是一个动画效果的障眼法而已,这样的实现就不难了哈
cf千变轮回钥匙(CF千变轮回钥匙数量算法介绍_cf千变轮回钥匙(CF千变轮 ...
CF游戏中的千变轮回钥匙是一种特殊的抽奖道具,对于参与千变轮回活动的玩家来说,理解其数量算法和使用规律至关重要。以下是关于CF千变轮回钥匙数量计算和使用技巧的详细介绍。首先,每次抽奖所需的钥匙数量并非固定,而是遵循一定的规律:1、3、5、7、11、18、30、38、60、70、78。这意味着玩家在抽奖时...
超级抽奖的抽奖系统
一、系统构建 超级抽奖的抽奖系统是通过编程实现的,它包含了一套复杂的算法来确保随机性。这套算法能够确保每次抽奖的结果都是随机的,不受任何外部因素的影响。参与者在系统中输入个人信息或进行特定操作后,即有机会参与抽奖。二、抽奖过程 在抽奖过程中,系统会依据预设的规则进行随机选择。具体的选择...
头条抽奖原理是什么意思?
抽奖游戏是人们在生活中非常喜爱的一种游戏方式,而头条抽奖则是一种常见的网络抽奖方式。其原理是根据多种算法对用户进行筛选和策略调整,最终选出中奖用户。其中,算法就是头条抽奖的灵魂,它是一种复杂的计算方式,能够帮助抽奖的结果尽可能地公正。头条抽奖的算法不仅考虑了用户的概率权重,同时也关注...