上次给的公式是错的,这次的公式是验证过的,绝对不会再错 ^_^。
a.
50个人可能的生日组合是365*365*365*……*365(共50个)个。
b. 50个人生日都不重复的组合是
365*364*363*……*316(共50个)个。
c. 50个人生日有重复的概率是 1 - a/b
代码如下:
#include
#include
using namespace
std;
unsigned int N = 50;
unsigned int M = 365;
int
main()
{
long double p = 1.0;
for( unsigned int i=0; i p *= (1-(double)i/M);
p = 1-p;
cout <<
p << endl;
system( "PAUSE" );
return
0;
}
输出结果是:0.97
但可惜long
double也不足够精确,所以我将M改为3,N改为0,1,2,3,4,5做测试,结果和实际一样
0/3几率是 0
1/3几率是
0
2/3几率是 1/3
3/3几率是 7/9
4/3几率是 1
5/3几率是 1
阅读(4144) | 评论(27) | 转发(0) |