提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
任务说明
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=