笔试题——硬币与金币(概率)

题目

( 2020/2/28 晚刚做的笔试。当时就差一点了,有点遗憾,还是做出来吧。)

1000枚硬币中有10枚金币,现在随机取n枚硬币,取到金币的概率是多少?(保留六位小数)

思路

首先:1000枚硬币分为10枚金币与990非金币。若n大于990,则必定取到金币。

取到金币的概率 = 1 - 没有取到金币的概率。

所以,我们只需要计算没有取到金币的概率即可。

现在我们需要用到排列组合了。

没有取到金币的概率 = 所取n枚硬币全为非金币的概率 = 在990枚非金币中随机取n枚的组合数量 / 在1000枚硬币中随机取n枚的组合数量。

在m个物体中随机无序的取出n个物体,有 C(n, m) 种取法。

(PS:由于markdown没法输入数学公式,就把 C(n, m) 想象成 n在右上角,m在右下角吧~)

所以,没有取到金币的概率 = C(n, 990) / C(n, 1000) =
(990 * 989 * 988 * … ) / ( 1000 * 999 * 998 * …)
其中分子分母各有n项。

可以看出,从n大于10开始,分子分母就有重复的数可以约分一些了。否则,计算出来的数会过大。
所以还要区分n小于等于10和n大于10的情况。

function func(n) {
      if (n > 990) {
        return '1.000000';
      } else {
        let a1 = 1, a2 = 1;
        if (n <= 10) {
          for (let i = 0; i < n; i++) {
            a1 *= (990 - i);
            a2 *= (1000 - i);
          }
        } else {
          for (let i = 0; i < 10; i++) {
            a1 *= (991 - n + i);
            a2 *= (1000 - i);
          }
        }
        let noGold = a1 / a2;
        let p = 1 - noGold;
        return p.toFixed(6);
      }
    }

结果:
笔试题——硬币与金币(概率)_第1张图片

你可能感兴趣的:(牛客网校招笔试题)