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
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