生日问题

假设所有年份都只有365天,求n个人中,出现生日相同的概率。

输入n

输出相同的概率(保留3位有效数字即可)

算法分析:n个人的生日是随机的一共有365的n次方种,都不同的种数是365对n进行全排列,然后用1减去即可。

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace std;

int main()

{

  float sum=1,n,i1;

  char  str[10];

  cin>>n;

 

  for(int i=365;i>365-n;i--)

   {

      i1=i;

      sum=sum*i1/365;

   }

  i1=1-sum;

  if(i1<0.001) printf("%.6f",i1);

  else if( i1<0.01) printf("%.5f",i1);

  else if(i1<0.1) printf("%.4f",i1);

  else printf("%.3f",i1);//当n太大时就不对啦

  return 0;

}


在计算机科学中,特别是概率论和计算理论领域,生日问题是这样一个经典的概率问题:假设在一个房间里有n个人,每个人都有随机选择一年中的任意一天作为他们的生日,问至少需要多少人才能确保至少有两个人同一天生日的概率大于某个特定值。 Java可以用于模拟这个问题,通过随机生成每一天作为每个人的生日,并维护一个数组或集合来跟踪已经出现过的生日。当添加第n+1个人时,我们可以检查这个人与当前已知的生日是否冲突,如果有冲突,则找到了一对相同的生日;如果没有冲突,我们就继续添加人直到找到冲突。 以下是一个简单的Java代码片段来模拟这个问题: ```java import java.util.*; public class BirthdayProblem { public static void main(String[] args) { int totalPeople = 0; while (probabilityOfNoOverlap(totalPeople) < 0.997) { // 例如设置99.7%的概率保证至少有一个人生日相同 totalPeople++; } System.out.println("至少需要 " + totalPeople + " 人才有超过99.7%的可能性存在至少两人生日相同"); } public static double probabilityOfNoOverlap(int peopleCount) { Calendar daysInYear = Calendar.getInstance(); return Math.pow(365 / daysInYear.getActualMaximum(Calendar.DAY_OF_YEAR), peopleCount); } } ``` 在这个程序中,`probabilityOfNoOverlap`函数计算没有共享生日的概率,然后我们在循环中不断增加人数,直到这个概率小于我们想要的阈值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值