获得鱼元素概率的机会

问题描述 投票:0回答:1

我正在尝试获得一些鱼的百分比。X是唯一的数字,在0-99之间,但在我的示例代码中为70(出于测试目的)。

但是目前它返回的结果确实错误,所以我在这里做错了。

当前输出:

[-0.17142857142857143, 0.04285714285714286, 0.2571428571428571, 0.2714285714285714]

哪个意思

  • -17%得到fish1
  • fish2的4.2%,
  • 25.7%fish3
  • 27%fish4

正确的数学如下:

如果X数为82+,它将得到鱼1。如果X数是67+,则为鱼2(除非82+等)。如果x数是52+,则为鱼3。如果它等于或小于51,则为鱼4。

因此,从理论上讲,x为85,获得它的机会为3/85。

然后,我需要当前X概率得到该特定鱼。我在这里错了吗?

function fishesPercentage(X) {
  var NumberSelected = RandomNumber(0,X-1);
  NumberSelected = 70;
  console.log("RANDOOM NUMBER IS : ",NumberSelected);
  let Fish1 = NumberSelected - 82;
  let Fish2 = NumberSelected - 67;
  let Fish3 = NumberSelected - 52;
  let Fish4 = NumberSelected - 51;

  return [
    Fish1/ NumberSelected,
    Fish2/ NumberSelected,
    Fish3/ NumberSelected,
    Fish4/ NumberSelected
  ];
}
javascript random probability
1个回答
0
投票

您想要获得给定数字X和一系列范围的1至4条鱼的概率。鱼的总数是:

鱼1)51或X(如果X较低)

鱼2)68-51 o X-51(如果X低于68)

如果这些X-N中的任何一个为负,则表示不存在该类型的鱼。

这可以通过以下两个功能中的任何一个来实现:

function fishProb(x) {
    let fish1 = Math.max(Math.min(x, 51),0)
    let fish2 = Math.max(Math.min(x-51, 68-51),0)
    let fish3 = Math.max(Math.min(x-68, 82-68),0)
    let fish4 = Math.max(Math.min(x-82, 99-82),0)
    return([fish1, fish2, fish3, fish4].map(f => f/x))
}

function fishProb2(x) {
    var allFishes = x
    var fishType = [51, 68-51, 82-68, 99-82]
    var fishes = []
    for (const currentFishes of fishType) {
        fishes.push( Math.max(Math.min(allFishes, currentFishes), 0) )
        allFishes -= currentFishes
    }
   return(fishes.map(f => f/x))
}

两个函数都返回相同的东西。我认为第二个问题用更简单的方式表达了这个问题。

如果您有X = 70,那么您就有51条Fish1,在剩余的70-51中,您有(68-51)条Fish2,其余3条是Fish3。暂无Fish4。

//X = 70
[0.7285714285714285, 0.24285714285714285, 0.02857142857142857, 0]

//X = 85
[0.6, 0.2, 0.16470588235294117, 0.03529411764705882]
© www.soinside.com 2019 - 2024. All rights reserved.