代码中的禅机

现有一概率问题:一个家庭有两个孩子,其中一个是男孩,问另一个也是男孩的概率。

很多人认为是1/2,很不幸这个答案是错误的,下面是这个问题的解决代码,可以看到应该是1/3。

    //一个家庭有两个孩子,其中一个是男孩,问另一个也是男孩的概率
    public static void main(String[] args) {
        int son = 0;
        int mother = 0;
        //这里有10000000个家庭
        for(int i = 0; i < 10000000; i++){
            int a=(int)(Math.random()*2);
            int b=(int)(Math.random()*2);
            //我们不知道应该先判断a还是先判断b.那么接下来就写个代码平分下概率。
            
            //在这个分支结束的概率是1/2
            if(a == 0) {
                mother++;
                if(b == 0) {
                    //1/4可以到这里
                    son ++;
                }
                //禅机在此
                continue;
            }
            
            //走到这里的概率是1/2
            if(b == 0) {
                //1/4进入这里
                mother++;
                if(a == 0) {
                    //此处必不进
                    son ++;
                }
            }else {
                //这个分支的概率是1/4,但是能走到这说明a和b都不是男孩,与题设“其中一个是男孩”产生矛盾,故不在本题的讨论范围内
         //此留白给大家感悟。

} } System.out.println(son); System.out.println(mother); }

运行结果为:

2499680
7498713

此中有禅机,欲辩已忘言。

原文地址:https://www.cnblogs.com/liuhui2010518/p/9078029.html