• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

js抽奖事件——生成不同概率随机数

武飞扬头像
ouyang0316
帮助1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

任务说明

js抽奖事件——生成不同概率随机数。
5支球队[A, B, C, D, E]参加状元抽签,编写程序实现A抽中状元签概率为25%,B抽中1号签概率20%,C抽中1号签概率15%,D抽中1号签概率10%,E抽中1号签概率5%。


一、任务要求

  1. 用js对象配置每个球队抽中状元签的概率
  2. 测试抽签很多次,输出球队抽中状元签的次数,检查是否和概率对应

二、代码

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
系列文章
更多 icon
同类精品
更多 icon
继续加载