Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830070
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-19 10:47:12

上次给的公式是错的,这次的公式是验证过的,绝对不会再错 ^_^。
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

阅读(3938) | 评论(27) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-19 10:57:52

灵敏
50个人中有2个人的生日相同的概率是0.97吗?

网友评论2012-11-19 10:57:37

无锡战神
原来如此!多谢!

网友评论2012-11-19 10:57:23

fankoo
这样的数学模型还有很多。。
例如将n个球放到N(N>=n)个盒子中,求每个盒子至多有一个球的概率。

网友评论2012-11-19 10:57:09

fatpenguin
哈哈,之前我也理解错了。原来应该是364 364 364......

网友评论2012-11-19 10:56:53

周星星
不错,前面有几个人理解错了,但我有意没指出来,哈哈!