zoukankan      html  css  js  c++  java
  • 求同一天生日的概率

    /**
     * 求同一天生日的概率
     * @author tiger
     * @date 2010-5-13
     *
     * 注:早上看公司邮件说本月有12名同事生日,
     * 突然就想算下有同一天生日的概率是多少。
     * 于是写了这段代码。
     *
     * 发现12个人有同一天生日的概率达到92%啊!
     *
     */
    public class tiger
    {
     /**
      * 求阶乘
      * m 须要是正数
      */
    /* private double jiecheng(int m)
     {
      if(m==0)
      {
       return 1;
      }else{
       return m * jiecheng(m-1);
      }
     }*/
     
     /**
      * 求组合(m选n)
      * m、n 须要是正数且m>n
      */
     private double zuhe(int m, int n)
     {
      double d = 1;
      while(n>0)
      {
       d = d * m;
       m--;
       n--;
      }
      return d;
     }
     
     /**
      * 求m的n次方
      */
     private double ncFang(int m, int n)
     {
      double d = 1;
      while(n>0)
      {
       d = d * m;
       n--;
      }
      return d;
     }
     
     /**
      * manNum个人,生日都在同一时间段,时间段是dayRange天。
      * 求他们中有两个或多个人同一天生日的概率。
      * @return 概率字符串
      */
     private String getGaiLv(int manNum,int dayRange)
     {
      if(manNum > dayRange) //人数大于天数,概率是百分之百。
      {
       return 100 + "%";
      }else{
       //double x = this.jiecheng(dayRange);
       //double y = this.jiecheng(dayRange - manNum);
       //double fenzi = x / y;
       double fenzi = this.zuhe(dayRange, manNum);
       System.out.println("fenzi = " + fenzi);
       double fenmu = this.ncFang(dayRange, manNum);
       System.out.println("fenmu = " + fenmu);
       return (100 - fenzi * 100 / fenmu) + "%";
      }
     }
     
     public static void main(String[] args)
     {
      int manNum = 15;
      int dayRange = 30;
      String str = new tiger().getGaiLv(manNum, dayRange);
      System.out.println("生日同在某个" + dayRange + "天时间段内的" + manNum + "个人中有相同生日的概率是" + str);
     }
    }

    //以下是打印的一些结果:

    //生日同在某个30天时间段内的15个人中有相同生日的概率是98.58635082845176%
    //生日同在某个30天时间段内的12个人中有相同生日的概率是92.20414059807956%
    //生日同在某个20天时间段内的8个人中有相同生日的概率是80.15972500000001%
    //生日同在某个20天时间段内的5个人中有相同生日的概率是41.86%
    //生日同在某个10天时间段内的2个人中有相同生日的概率是10.0%
    //生日同在某个10天时间段内的1个人中有相同生日的概率是0.0%

  • 相关阅读:
    关于C++顺序容器一致初始化的问题
    44. 通配符匹配(Wildcard Matching)
    76. 最小覆盖子串(Minimum Window Substring)
    72. 编辑距离(Edit Distance)
    首入大观园
    删除链表的倒数第N个节点
    目标和
    克隆图
    最长回文子串
    旋转矩阵
  • 原文地址:https://www.cnblogs.com/chaohi/p/2330347.html
Copyright © 2011-2022 走看看