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());

  

posted @ 2024-12-04 20:46  我是格鲁特  阅读(69)  评论(0编辑  收藏  举报