题目:设计一个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());