题目链接:Birthday Paradox - LightOJ 1104 - Virtual Judge (vjudge.net)
题意:给一个数n,我们从1~n中随机选择k个数,问k的值至少为多少才能使得出现相同两个数的概率大于等于0.5。
分析:这道题目比较简单,就是我们用1减去不存在两个数相同的情况的概率就好,假如我们选择k个数,则没有两个数相同的概率为n*(n-1)*……*(n-k+1)/pow(n,k),我们直接暴力求解即可,下面是代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int T,n;
cin>>T;
for(int o=1;o<=T;o++)
{
scanf("%d",&n);
double ans=1;
int t=1;
while(ans>0.5)
{
ans=ans*(n-t)/n;
t++;
}
printf("Case %d: %d\n",o,t-1);
}
return 0;
}