题目描述:
假设你工作在一个有23人的办公室中,那么办公室中两人生日相同的机率有多少?
完整代码:
#include <iostream>
int main()
{
int n; float p = 1;
std::cin >> n; //输入总人数;
for (int i(0); i <= n; ++i) //这部分可以也可以从1开始,只需将(365 - i) / 365变为(366 - i) / 365即可;
p = p * (365 - i) / 365;
std::cout << (1 - p) * 100 << "%";
return 0;
}
分析:
1、为了便于研究,我们剔除掉2月29号的情况(即一年有365天);
2、相同的概率 + 不相同的概率 = 1;
3、我和其他人生日不相同的概率有多少?递推到n个人;
2个人:
我和其他人生日不相同的概率
第一个人的生日是365天中的任意一天 P1 = (365 - 0)/ 365;
我和他不同的概率即有P2 =(365 - 1)/ 365 ;
所以两个人中生日不同的概率就为P1 * P2 = (365 - 0) / 365 * (365 - 1) / 365 = 0.9972;
3个人:
第一个人还是365 / 365,我依旧是(365 - 1)/ 365 ;
然后到了第三个人,他要和我们不同只能在剩下的363天中任选一天,所以他的概率就是(365 - 2)/ 365;
所以三个人中生日不同的概率就为P1 * P2 * P3 = (365 - 0) / 365 * (365 - 1) / 365 * (365 - 2)/ 365= 0.9917;
//
......
//
n个人:
递推到最后的话,我们就可以发现n个人中两人生日不相同的概率可以如下表示:
P1 * P2 * P3 * ...... * Pn = (365 - 0) / 365 * (365 - 1) / 365 * (365 - 2) / 365 * ...... * (365 - n + 1) / 365 ;