【问题标题】:Chance of obtaining fish element Probability获得鱼元素概率
【发布时间】:2020-05-07 20:51:39
【问题描述】:

我正在尝试获取一些鱼的百分比。 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
  ];
}

【问题讨论】:

  • 负概率是什么意思?
  • @NinaScholz 它无法获得。像 82+ 它得到 fish1,但由于 numberselected 是 70,它是不可能的。
  • 您对70 有什么期望?我有一个问题,因为 70 只是一个结果,不能用于获得概率,因为你已经有 4 个值/鱼的概率。
  • 我希望@NinaScholz 至少有 51% 的 fish4。鱼 4 的概率为 51/70,鱼 2 的概率为 3/70。
  • 如果值为70,则您不再有可能拥有不同的值。

标签: javascript random probability


【解决方案1】:

您想要获得给定数字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。批次中没有 Fish1。

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

【讨论】:

  • 是的,应该相应地更改名称。更改了名称并为第二个添加了 reverse()。
  • 可以删除的reverse() 是使用unshift 而不是push