js抽奖算法
题目:设计一个js抽奖程序,一共分为三等奖,每一个等级的中奖概率及中奖人数都可自定义。
解法核心:
-
设定概率:
- 一等奖概率:10%(即 0 - 0.1 的范围)
- 二等奖概率:30%(即 0.1 - 0.4 的范围)
- 三等奖概率:40%(即 0.4 - 0.8 的范围)
- 剩余 20% 不中奖(即 0.8 - 1 的范围)
-
生成随机数:使用
Math.random()
生成一个 [0, 1) 区间的随机数。 -
根据随机数确定奖项:根据随机数值判断它落在哪个概率区间,决定抽中的奖项。
class Lottery { constructor(prizes) { this.prizes = prizes; // 奖项的配置 {1: 1, 2: x, 3: y} this.results = { 1: 0, // 一等奖中奖人数 2: 0, // 二等奖中奖人数 3: 0, // 三等奖中奖人数 none: 0 // 未中奖人数 }; } // 执行抽奖 drawLottery() { // 生成 0 到 1 之间的随机数 const random = Math.random(); // 根据随机数的范围确定奖项 if (random < 0.1 && this.results[1] < this.prizes[1]) { this.results[1]++; // 一等奖 return '一等奖'; } else if (random < 0.4 && this.results[2] < this.prizes[2]) { this.results[2]++; // 二等奖 return '二等奖'; } else if (random < 0.8 && this.results[3] < this.prizes[3]) { this.results[3]++; // 三等奖 return '三等奖'; } else { this.results.none++; // 未中奖 return '未中奖'; } } // 获取当前中奖情况 getResults() { return this.results; } } // 创建一个抽奖实例,其中一等奖1个,二等奖3个,三等奖5个 const lottery = new Lottery({1: 1, 2: 3, 3: 5}); // 执行10次抽奖 for (let i = 0; i < 10; i++) { console.log(lottery.drawLottery()); } // 查看当前抽奖结果 console.log(lottery.getResults());