为了账号安全,请及时绑定邮箱和手机立即绑定

计算随机数出现的百分比

计算随机数出现的百分比

翻阅古今 2022-12-29 16:04:02
我正在研究分配问题。例如:我要调用一个函数,这个函数应该触发第二个函数。第二个功能可以是 3(三)个选项之一。我想要:函数 A 应该有 10% 的时间被调用 函数 B 应该有 20% 的时间被调用 函数 C 应该有 70% 的时间被调用有 2 个选项 (70%-30%),很容易。我生成一个随机整数 Math.round(Math.random()*100),然后检查结果是否 < 30。结果 < 30 转到一个函数,其余的转到另一个函数,它平衡到 70/30。但是,当涉及到有两个以上的选项时,我遇到了逻辑问题。这是大纲: //Initialize variablesvar twentyPercentCount = 0;var seventyPercentCount = 0;var tenPercentCount = 0;//Iterate 10,000 timesfor (var i = 0; i < 10000; i++) {  // generate whole integer 0-99   // logic}console.log("number of times value is < 20:  " + twentyPercentCount);console.log("number of times value is < 70:  " + seventyPercentCount);console.log("remaining ten percent range:  " + tenPercentCount);我目前正在尝试的是:var twentyPercentCount = 0;    var seventyPercentCount = 0;    var tenPercentCount = 0;    var distributionArray = [10, 20, 100];    for (var i = 0; i < 10000; i++) {      var rnd = Math.round(Math.random() * 100);      // find first element > the random number      let chosenNum = distributionArray.find((element) => element >= rnd);      if (chosenNum == 100) {        seventyPercentCount += 1;      } else if (chosenNum == 20) {        twentyPercentCount += 1;      } else {        tenPercentCount += 1;      }    }    console.log("number of values less than 10:  " + twentyPercentCount);    console.log("number of values less than 20:  " + twentyPercentCount);    console.log("70 percent range:  " + seventyPercentCount);结果**number of values less than 10:  943number of values less than 20:  94370 percent range:  8025**问题是 10% 和 20% 的桶仍然相等。我知道这是我的逻辑缺陷,但无法克服。
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

你可以把想要的分布的总和


[10, 20,  70] // distribution

[10, 30, 100] // totals

并检查随机值。


const

    distribution = [10, 20, 70],

    totals = distribution.map((s => v => s += v)(0));

    count = [0, 0, 0];


for (var i = 0; i < 10000; i++) {

  const

      rnd = Math.random() * 100,

      chosenNum = totals.findIndex(element => rnd < element);


  count[chosenNum]++;      

}


console.log(count);


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号