Birthday Paradox LightOJ - 1104
给定一年的天数 n n n,求至少需要多少人,才能保证其中至少有两个人的生日在同一天的概率 ≥ 0.5 \ge 0.5 ≥0.5?
从反面考虑,假如 k k k 个人每个人的生日都不相同,那么概率是:
p = n − 1 n ⋅ n − 2 n ⋯ n − k + 1 n p=\frac{n-1}{n}\cdot\frac{n-2}{n}\cdots\frac{n-k+1}{n} p=nn−1⋅nn−2⋯nn−k+1
代码如下:
#include<iostream>
#include<cstdio>
//#define WINE
using namespace std;
int T,iCase,n,res;
double p;
int main(){
#ifdef WINE
freopen("data.in","r",stdin);
#endif
scanf("%d",&T);
while(T--){
scanf("%d",&n);
res=1,p=1;
for(int i=n-1;i>=1;i--){
p=p*i/n;
if(p<=0.5)break;
res++;
}
printf("Case %d: %d\n",++iCase,res);
}
return 0;
}