计算随机数出现的百分比

我正在研究分配问题。例如:我要调用一个函数,这个函数应该触发第二个函数。第二个功能可以是 3(三)个选项之一。我想要:函数 A 应该有 10% 的时间被调用 函数 B 应该有 20% 的时间被调用 函数 C 应该有 70% 的时间被调用


有 2 个选项 (70%-30%),很容易。我生成一个随机整数 Math.round(Math.random()*100),然后检查结果是否 < 30。结果 < 30 转到一个函数,其余的转到另一个函数,它平衡到 70/30。


但是,当涉及到有两个以上的选项时,我遇到了逻辑问题。


这是大纲:


 //Initialize variables

var twentyPercentCount = 0;

var seventyPercentCount = 0;

var tenPercentCount = 0;

//Iterate 10,000 times

for (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:  943

number of values less than 20:  943

70 percent range:  8025**

问题是 10% 和 20% 的桶仍然相等。我知道这是我的逻辑缺陷,但无法克服。


翻阅古今
浏览 144回答 1
1回答

开心每一天1111

你可以把想要的分布的总和[10, 20,&nbsp; 70] // distribution[10, 30, 100] // totals并检查随机值。const&nbsp; &nbsp; distribution = [10, 20, 70],&nbsp; &nbsp; totals = distribution.map((s => v => s += v)(0));&nbsp; &nbsp; count = [0, 0, 0];for (var i = 0; i < 10000; i++) {&nbsp; const&nbsp; &nbsp; &nbsp; rnd = Math.random() * 100,&nbsp; &nbsp; &nbsp; chosenNum = totals.findIndex(element => rnd < element);&nbsp; count[chosenNum]++;&nbsp; &nbsp; &nbsp;&nbsp;}console.log(count);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript