Javascript 获得鱼元素概率的机会

Javascript 获得鱼元素概率的机会,javascript,random,probability,Javascript,Random,Probability,我在试着得到一些鱼的百分比。 X是这里唯一的数字,它在0-99之间,但在我的示例代码中,它是70,用于测试目的 但是现在它返回了非常错误的结果,所以我在这里做了一些错误的事情 电流输出: [-0.17142857142857143, 0.04285714285714286, 0.2571428571428571, 0.2714285714285714] 也就是说 -17%获得fish1 鱼类2的4.2% 25.7%fish3 27%fish4 正确的数学公式如下: 如果X数是82+,它将得

我在试着得到一些鱼的百分比。
X
是这里唯一的数字,它在0-99之间,但在我的示例代码中,它是70,用于测试目的

但是现在它返回了非常错误的结果,所以我在这里做了一些错误的事情

电流输出:

[-0.17142857142857143, 0.04285714285714286, 0.2571428571428571, 0.2714285714285714]
也就是说

  • -17%获得
    fish1
  • 鱼类2的
    4.2%
  • 25.7%
    fish3
  • 27%
    fish4
正确的数学公式如下:

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

因此,理论上,如果x
85,那么获得它的几率是3/85

然后我需要当前X得到特定鱼的概率。 我做错了什么

函数fishespentage(X){
var NumberSelected=随机数(0,X-1);
所选数量=70;
console.log(“随机房间编号为:”,已选择编号);
设Fish1=NumberSelected-82;
设Fish2=所选编号-67;
设Fish3=所选编号-52;
设Fish4=所选编号-51;
返回[
鱼1/所选编号,
鱼2/已选择的编号,
Fish3/已选择的编号,
鱼4/选择的编号
];
}

您希望获得给定数量
X
和一系列范围的鱼1到4的概率。鱼类总数为:

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

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

等等

如果这些X-N中的任何一条是负的,这意味着没有这种类型的鱼

这可以通过以下两种功能之一实现:

function fishProb(x) {
    let fish4 = Math.max(Math.min(x, 51),0)
    let fish3 = Math.max(Math.min(x-51, 68-51),0)
    let fish2 = Math.max(Math.min(x-68, 82-68),0)
    let fish1 = 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).reverse())
}
两个函数返回相同的内容。我认为第二个问题用一种更简单的方式来表达

如果X=70,则有51条Fish4,剩余的70-51条中有(68-51条)条Fish3,其余的3条为Fish2。该地段没有鱼

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

//X = 85
[0.03529411764705882, 0.16470588235294117, 0.2, 0.6]

//X = 20. In this case you only have 20 Fish4 and none of the others.
[0, 0, 0, 1]

什么是负概率?@NinaScholz说这是不可能的。就像82+一样,它得到了鱼1,但是由于numberselected是70,这是不可能的。您希望
70
的值是多少?我有一个问题,因为70只是一个结果,不适用于获得概率,因为你已经有了4个值/鱼的概率。我预计@NinaScholz至少有51%的鱼4。鱼4的概率为51/70,鱼2的概率为3/70。如果值为
70
,则不再可能有不同的值。是的,应该相应地更改名称。名称已更改,并为第二个名称添加了反向()。可以删除的
reverse()
是使用
unshift
而不是
push