概率计算,,,
先计算它的对立事件的概率比较简单。就是最后两个分到的汉堡不一样。
那么最后两个肯定是两个不同的。
所以这种事件的总数有c(n-2,(n-2)/2)个,
开始的时候用总数为c(n,n/2)来计,发现连样例都过不了。。
后来用2^(2-n)来乘。得到的概率就行了。。
回过去。才认识到自己的错误,这种选择排列在两种汉堡都有剩余的时候才是等概率的。。
所以c(n,n/2)中有很多不成立的情况。
计算变得简单起来。。
f[n] = 2^(2-n)*c(n-2,(n-2)/2);
然后推得递归关系: f[n+2] = (n-1)/n*f[n];
代码如下:
#include <cstdio>
#include <cmath>
#define N 100000
double p[N+5];
int init()
{
p[2] = 1.0;
for(int i = 2; i < N; i++)
p[i+2] = 1.0*(i-1)/i*p[i];
}
int main ()
{
int n, t;
init();
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%.4lf\n",1-p[n]);
}
return 0;
}
本文介绍了一种通过计算对立事件概率的方法来解决复杂问题的技巧。主要关注于如何在两种汉堡都有剩余的情况下,计算两个顾客获得相同汉堡的概率。文章还提供了一个递归公式用于计算该概率,并给出了具体的代码实现。
332

被折叠的 条评论
为什么被折叠?



