黑白球问题

题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
1、每次从桶里面拿出来两个球;
2、如果是两个同色的球,就再放入一个黑球;
3、如果是两个异色的球,就再放入一个白球;
问:最后桶里面只剩下一个黑球的概率是多少?

//我写了一个简单的程序验证了一下,无论运行多少次都是只剩黑球,也就是只剩黑球的概率是100%@Testpublic void test02(){// 1 代表白球  0 代表黑球  一共200 个  随机选取List list = new ArrayList<>();for (int i = 0; i < 100; i++) {list.add(1);list.add(0);}while(true){Random r = new Random();// 依次随机取俩个球int num = r.nextInt(list.size());Integer integer = list.remove(num);int num2 = r.nextInt(list.size());Integer integer2 =  list.remove(num2);// 根据规则放球if(integer.equals(1) && integer2.equals(1) || integer.equals(0) && integer2.equals(0)){list.add(0);}if(integer.equals(0) && integer2.equals(1) || integer.equals(1) && integer2.equals(0)){list.add(1);}if(list.size() == 1){// 输出最后剩下什么球System.out.println(list);break;}}}

代码的结果比较直观,但是还是可以通过叙述的方式叙述出来.

把黑球做0,白球看作1,每次的规则可以看作异或操作,即有相同的就放黑球,不同放白球.下表就是异或的四种情况,刚好符合我们的题目.

a

b

a ^ b

0

0

0

0

1

1

1

0

1

1

1

0

异或运算符合交换律,就是相同数量的0,1无论你怎么打乱顺序进行运算都不会影响结果,所以对于100颗白球和100颗黑球,可以等价于优先与将和100个黑球(0)做异或运算,再去和100个白球做异或运算的结果做异或运算.其实我也想了也可以这样理解100 * ( 0 ^ 1) 和上面那个的一样,最后都是剩余 100个黑球,要是使用异或的操作的话,我那个判断可以简化一下

if((integer ^ integer2) == 0 ){list.add(0);
}
if((integer ^ integer2) == 1 ){list.add(1);
}

也可以得出结论,偶数个1或者0进行异或运算最后都得到 0,最后贴出原博文博主总结的规律

a.偶数个0做异或运算的结果为0
b.奇数个0做异或运算的结果为0
c.偶数个1做异或运算的结果为0
d.奇数个1做异或运算的结果为1

参考博文博主列出了俩种思路,我只写了异或,感兴趣的小伙伴可以去下面这个地址去看看

参考博文: 概率题之黑白球问题_胡小白的数据科学之路的博客-CSDN博客


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部