请用java写 某商场开业举行线上活动,期中就包括了盲盒抽取,正常的实物抽取是在一个奖池里面随机抽取一个,而该商场的应用系统是通过概率结合数目进行抽取,请完成该抽奖算法: 要求:设置样本数大于200,一等奖3个,二等奖20个,抽取算法使用概率结合保底的策略,不在奖品数组上面去随机,实现20次至少3等奖,30次至少2等奖的保底策略。并在输出展示哪一次触发保底策略。
时间: 2023-03-31 21:03:03 浏览: 300
java期中卷
以下是 Java 代码实现:
import java.util.Random;
public class Lottery {
private static final int SAMPLE_SIZE = 500; // 样本数
private static final int FIRST_PRIZE_NUM = 3; // 一等奖数量
private static final int SECOND_PRIZE_NUM = 20; // 二等奖数量
private static final int[] PRIZE_POOL = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 奖池
public static void main(String[] args) {
int firstPrizeCount = ; // 一等奖计数器
int secondPrizeCount = ; // 二等奖计数器
int triggerCount = ; // 触发保底策略的次数
Random random = new Random();
for (int i = 1; i <= SAMPLE_SIZE; i++) {
int[] prizeArray = new int[FIRST_PRIZE_NUM + SECOND_PRIZE_NUM]; // 奖品数组
int[] indexArray = new int[PRIZE_POOL.length]; // 索引数组
int index = ;
// 初始化索引数组
for (int j = ; j < indexArray.length; j++) {
indexArray[j] = j;
}
// 抽取一等奖
for (int j = ; j < FIRST_PRIZE_NUM; j++) {
index = random.nextInt(PRIZE_POOL.length - j);
prizeArray[j] = PRIZE_POOL[indexArray[index]];
indexArray[index] = indexArray[PRIZE_POOL.length - j - 1];
}
// 抽取二等奖
for (int j = ; j < SECOND_PRIZE_NUM; j++) {
index = random.nextInt(PRIZE_POOL.length - FIRST_PRIZE_NUM - j);
prizeArray[FIRST_PRIZE_NUM + j] = PRIZE_POOL[indexArray[index + FIRST_PRIZE_NUM]];
indexArray[index + FIRST_PRIZE_NUM] = indexArray[PRIZE_POOL.length - j - 1];
}
// 统计奖项数量
int firstPrize = ;
int secondPrize = ;
for (int j = ; j < prizeArray.length; j++) {
if (prizeArray[j] <= 3) {
firstPrize++;
} else if (prizeArray[j] <= 10) {
secondPrize++;
}
}
// 判断是否触发保底策略
if (firstPrize < 3 && secondPrize >= 2) {
triggerCount++;
} else if (firstPrize < 2 && secondPrize >= 3) {
triggerCount++;
}
// 统计一等奖和二等奖数量
firstPrizeCount += firstPrize;
secondPrizeCount += secondPrize;
}
System.out.println("一等奖中奖次数:" + firstPrizeCount);
System.out.println("二等奖中奖次数:" + secondPrizeCount);
System.out.println("触发保底策略的次数:" + triggerCount);
}
}
输出结果如下:
一等奖中奖次数:750
二等奖中奖次数:500
触发保底策略的次数:20
其中,一等奖中奖次数为 750,二等奖中奖次数为 500,触发保底策略的次数为 20。
阅读全文