Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988600
  • 博文数量: 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

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

网友评论2012-11-19 10:49:54

ishou
23人 时的概率是:
0.50729723432398540722541722833703250025

30人 时的概率是:
0.70631624271926865995623965867730366181

35人 时的概率是:
0.81438323887471523275939529078225043834

41人 时的概率是:
0.90315161148173540173928850723367156802

网友评论2012-11-19 10:49:25

ishou
我用超级精度软件 (小数点后无失真记录到38位) 计算得到的结果如下:

0.97037357957798839991865520436840386588

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

bayes
这到是个经典的概率题目,往往用来说明你的感觉是极不可靠的。。。
我原来算过,23人就可以超过1/2的概率保证有人生日相同,呵呵!这个很多人也没想到!

网友评论2012-11-19 10:48:43

问题男
没考虑闰年

网友评论2012-11-19 10:48:30

紫水晶
.......