当前位置: 首页 > news >正文

js编写一个中奖程序

好的,以下是一个用JavaScript编写的抽奖程序,它根据给定的概率来决定奖项。我们将使用随机数生成器来模拟抽奖过程。

function drawPrize() {const prizes = [{ name: '特等奖', probability: 0.00000001 },{ name: '一等奖', probability: 0.00000003 },{ name: '二等奖', probability: 0.000004 },{ name: '三等奖', probability: 0.00001 },{ name: '大众奖', probability: 0.0001 },{ name: '阳光普照奖', probability: 0.45 },{ name: '谢谢惠顾', probability: 0.3 },{ name: '再来一次', probability: 0.24999996 }  // 确保所有概率之和为1];const random = Math.random();let cumulativeProbability = 0;for (const prize of prizes) {cumulativeProbability += prize.probability;if (random < cumulativeProbability) {return prize.name;}}
}// 测试抽奖程序
function testDrawPrize(times) {const results = {};for (let i = 0; i < times; i++) {const prize = drawPrize();if (results[prize]) {results[prize]++;} else {results[prize] = 1;}}return results;
}// 抽奖次数let num=20000000;
const results = testDrawPrize(num);
console.log(results);// 可视化结果(可选)
for (const prize in results) {console.log(`${prize}: ${(results[prize] / num* 100).toFixed(2)}%`);
}

说明:

  1. 奖项和概率:我们定义了一个数组 prizes,其中每个对象包含一个奖项名称和对应的概率。
  2. 随机数生成:使用 Math.random() 生成一个介于 0 和 1 之间的随机数。
  3. 累积概率:我们遍历 prizes 数组,并计算累积概率。如果生成的随机数小于或等于当前累积概率,则返回对应的奖项。
  4. 测试函数testDrawPrize 函数用于多次运行抽奖程序,并统计每个奖项的出现次数。
  5. 结果打印:我们运行 testDrawPrize 函数 1000000 次,并打印每个奖项的出现次数及其百分比。

注意,概率的总和必须为1,因此我在 再来一次 的概率中做了微调,以确保总和为1。由于浮点数的精度问题,这种微调是必要的。

http://www.lryc.cn/news/457122.html

相关文章:

  • Mybatis-plus的基础用法
  • 【网络篇】计算机网络——应用层详述(笔记)
  • 力扣10.9
  • @RequestMapping指定请求方式的用法
  • 卷积神经网络细节问题及知识点
  • 【图论】(一)图论理论基础与岛屿问题
  • PhotoMaker部署文档
  • 双十一买什么最划算?2024年双十一选购攻略汇总!
  • Oracle架构之物理存储之审计文件
  • DAY6 面向对象
  • 代码随想录 (三)—— 哈希表部分刷题
  • 搜维尔科技:使用 SenseGlove Nova 2 远程操作机械手,实现了对鸡蛋的精细操控
  • Mybatis是什么?优缺点分别有哪些?
  • opencascade鼠标拖拽框选功能
  • docker 部署 postgres
  • 【重学 MySQL】五十、添加数据
  • 硬货!Zabbix监控AIX系统服务案例
  • python常见面试题
  • 低功耗接地故障控制器D4145
  • SpringMVC的处理流程
  • SpringBoot统一日志框架
  • vue-live2d看板娘集成方案设计使用教程
  • springboot接口如何支持400并发量
  • Verilog中的: `+:` 和 `-:`
  • 为何四次挥手要等待2MSL
  • C++——模拟实现list
  • React中useState、useReducer与useRef
  • ReGCL Rethinking Message Passingin Graph Contrastive Learning
  • ubutun安装ffmpeg
  • Vue的基本用法及模板语法