js抽奖事件——生成不同概率随机数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
任务说明
js抽奖事件——生成不同概率随机数。
5支球队[A, B, C, D, E]参加状元抽签,编写程序实现A抽中状元签概率为25%,B抽中1号签概率20%,C抽中1号签概率15%,D抽中1号签概率10%,E抽中1号签概率5%。
一、任务要求
- 用js对象配置每个球队抽中状元签的概率
- 测试抽签很多次,输出球队抽中状元签的次数,检查是否和概率对应
二、代码
1.关键代码
共有A,B,C,D,E五个事件,其发生的概率为A-0.25,B-0.2, C-0.15, D-0.1,E-0.05;
首先我们要构造一个大区间(0,0。75),这个大区间的上限为五个事件发生的概率之和0.75,把大区间化为5个长度不等的小区间(多少个事件就多少个小区间),每个小区间的跨度对应各个事件的发生概率,A(0,0.25),B(0.25,0.45),C(0.45,0.6),D(0.6,0.7),E(0.7,0.75)。最后在大区间(0,0.75)中生成一个等概率随机数x,x落在哪个小区间内,就说明那个事件发生了。
function prize()
{
// 概率总和,即大区间的上限
var m=0.25 0.20 0.15 0.10 0.05;
// console.log(m);
var sum=0;
// 每次循环产生的随机数
var num=0;
// 返回的对象的key
var k;
// 生成概率随机数
num=Math.random()*m;
// console.log(num);
for(var z in obj){
// sum每次增长的长度为各个小区间的跨度,即事件的概率
sum=sum (obj[z]);
// console.log(sum);
// 如果sum大于等于num说明x落在了i事件内。
if(sum>=num)
{
k=z;
//return 直接结束循环
return k;
// console.log(k);
}
}
}
2.整体代码
代码如下:
html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>不同概率随机数</title>
</head>
<script src="./js/getNum.js"></script>
<!-- <script src="./js/Myfunction.js"></script> -->
<body>
<div style="text-align: center;">
<button onclick="Myfunction()">点击抽奖10000次</button>
</div>
<script src="./js/Myfunction.js"></script>
<section>
<div style="text-align: center;font-size:20px;">A出现了<span></span>次</div>
<div style="text-align: center;font-size:20px;">B出现了<span></span>次</div>
<div style="text-align: center;font-size:20px;">C出现了<span></span>次</div>
<div style="text-align: center;font-size:20px;">D出现了<span></span>次</div>
<div style="text-align: center;font-size:20px;">E出现了<span></span>次</div>
</section>
</body>
</html>
js
function rand(min,max){
n=Math.floor(Math.random()*(max-min)) min;
return n;
}
var obj=
{
A:0.25,
B:0.20,
C:0.15,
D:0.10,
E:0.05
}
function Myfunction() {
console.log("点击了!")
var arr=[0,0,0,0,0]
for(var j=0;j<10000;j )
{
var key=prize();
for(var i in obj){
// console.log(i);
if(key==i)
{
if(i=='A')
{
arr[0]=arr[0] 1;
}
else if(i=='B')
{
arr[1]=arr[1] 1;
}
else if(i=='C')
{
arr[2]=arr[2] 1;
}
else if(i=='D')
{
arr[3]=arr[3] 1;
}
else if(i=='E')
{
arr[4]=arr[4] 1;
}
}
}
}
var s = document.getElementsByTagName('span');
s[0].innerText = arr[0];
s[1].innerText = arr[1];
s[2].innerText = arr[2];
s[3].innerText = arr[3];
s[4].innerText = arr[4];
}
function prize()
{
// 概率总和,即大区间的上限
var m=0.25 0.20 0.15 0.10 0.05;
// console.log(m);
var sum=0;
// 每次循环产生的随机数
var num=0;
// 返回的对象的key
var k;
// console.log(obj);
// for(var i in obj){
// sum=sum obj[i];
// }
// 生成概率随机数
num=Math.random()*m;
// console.log(num);
for(var z in obj){
// sum每次增长的长度为各个小区间的跨度,即事件的概率
sum=sum (obj[z]);
// console.log(sum);
// 如果sum大于等于num说明x落在了i事件内。
if(sum>=num)
{
k=z;
//return 直接结束循环
return k;
}
}
}
总结
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhbcfhk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel图片置于文字下方的方法
PHP中文网 06-27