概述
题意:给定一个时间作为一年的天数,问至少邀请多少个人才能使至少有两个人的生日是同一天的概率不小于0.5。
正面算显然是不好算的,所以我们可以算其互斥事件(应该是这样叫,高中知识忘光了):没有人的生日是同一天的概率,然后再用总概率1减去它就可以得到至少两个人生日是同一天的概率了。
P(所有人的生日都不同)=(day/day)*(day-2/day)*(day-3/day)*...=A(day,n)/(day^n);
其实后面的通式没啥用,我们暴力算就行了,day的范围是1e5,实现暴力了一下结果是300+,t=2e4,所以不会超时。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string.h>
#include <string>
using namespace std;
double p;
int n;
const int N = 110;
int val[N];
double cp[N];
double dp[N * N];
int main()
{
int t;
scanf("%d", &t);
for (int k = 1; k <= t; k++)
{
int n;
scanf("%d", &n);
int ans = 1;
double sign = 1.0;
while (sign > 0.5) {
sign *= (double)1.0 * (1.0 + n - ans) / n;
if (sign <= 0.5) {
break;
}
ans++;
}
printf("Case %d: %dn",k, ans-1);//其实我自己都搞不懂为啥要减一,上面题面365不都是23吗,咋下面是22,其他的样例我试了一下暴力结果都比样例输出大1.。。
}
return 0;
}
最后
以上就是细心嚓茶为你收集整理的Birthday Paradox(简单概率)的全部内容,希望文章能够帮你解决Birthday Paradox(简单概率)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复