题意:一些时候一些数学理论难以去信服。一个比较寻常的问题是(生日悖论)。假设你在一个23个人的房间里,包括你自己。那么至少2个人的生日相同的概率为(50\%),你被给予了一年的的天数,假设你在不同的星球,比如,火星,一年是669天。你需要去寻找你至少要邀请的人数,使得有2个人的生日相同的概率至少为0.5。
分析:容斥原理,至少有两个人的生日相同的概率为0.5,那么从侧面考虑,(1 - 每个人生日都不相同的概率 >= 0.5),每个人生日都不同的概率为(frac{n - 1}{n}*frac{n - 2}{n} * frac{n - 3}{n}*...*frac{n - m + 1}{n}),那么每个人生日都不同的概率为(frac{n - 1}{n}*frac{n - 2}{n} * frac{n - 3}{n}*...*frac{n - m + 1}{n} <= 0.5)。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
int c = 0;
while (t--)
{
int n;
scanf("%d", &n);
double p = 1.0;
int m;
for (int i = n; i >= 1; --i)
{
p = p * (i - 1) / n;
if (p <= 0.5)
{
m = 1 + n - i;
break;
}
}
printf("Case %d: %d
", ++c, m);
}
return 0;
}