【题目描述】

桶中取黑白球

有一个桶,里面有白球、黑球各100个,人们必须按照以下规则把球取出来:
1、每次从桶中那两个球
2、如果是两个同色的球,那就再放入一个黑球
3、如果是两个异色的球,那就再放入一个白球

问:最后桶里面最后剩下一个球是白球和黑球的概率各是多少。

【思路解析】

思路一:归纳总结

依靠枚举的思路,比如假设黑白球各10个、5个、2个等来分析和推断,然后找规律。

分析过程可以参考《编程之美》第4.6节中的“桶中取黑白球”题。

思路二:连续异或

对桶中的球而言,取出2个球共有3种情况:

1、取出两个黑球,放回一个黑球
2、取出两个白球,放回一个黑球
2、取出一黑一白,放回一个白球

将上述的过程抽象成为数学上的异或运算:

1、2个黑球变成1个黑球 ==> 1 ^ 1 = 1
2、2个白球变成1个黑球 ==>0 ^ 0 = 1
3、1白1黑变成1个白球 ==> 1 ^ 0 = 1

在上述的抽象的过程中,主要利用了异或的性质:相同得0,不同得1。因此可以将同色时放入的黑球用0代替,异色时放入的白球用1代替。

由于异或运算满足结合律(a ^ b ^ c = a ^ (b ^ c))和交换律(a ^ b = b ^ c),那么就有
a ^ b ^ c = a ^ c ^ b = b ^ a ^ c = b ^ c ^ a = c ^ a ^ b = c ^ b ^ a

也就是异或结果与异或的顺序无关,任意的异或顺序最终计算的结果都是一致的。

桶中取出100个黑白球,不断取出2个球放回一个球,就是不断取出两个数异或,并将异或结果放回计算序列。也就是,将所有的数进行异或就是最终的结果。

例如有2个黑球和2个白球,就是1^ 1 ^ 0 ^ 0 = 0, 无论任何的取出顺序最终都将获得黑球(对应数字0)

那么,100个黑球和100个白球,也就是100个0和100个1连续异或的结果。连续异或结果是0,也就是最终剩下的一定是黑球。也就是剩下黑球的概率为100%,剩下白球的概率是0。

如果,是5个黑球和5个白球。那么5个1和5个0连续异或,异或的结果是1,那么最终剩下的结果是1,也就是最终剩下的一定是白球。也就是剩下白球的概率是100%,剩下黑球的概率是0。

【结论说明】

经过上面的分析,将“桶中取出黑白球”问题抽象为“连续异或计算”的问题,同色放回桶中的球为0,异色放回桶中的球为1。最终异或结果代表剩下的球。

N个白球、N白球。如果N为偶数,那么最终异或结果为0,剩同色放入的球;如果N为奇数,最终异或的结果为1,剩异色放回的球。

如果黑白球颜色不相等,情况可能稍微复杂一些,但是都是进行连续异或的计算。


参考书籍:《编程之美》第4.6节 桶中取黑白球

100个白球100个黑球,取出两个球,同色则补充黑色,异色则补充白色。最后剩什么颜色相关推荐

  1. 假设你有8个球,其中一个略微重一些,但是找出这个球的唯一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?

    答:2 次 方法:从 8 个球中分别任取 3 个放在天平上对比 两边重量相等 则较重的球在剩下的两个球中,再在天平上进行对比就可以找出较重的球 两边重量不等 则待找的球在较重的一方中,在该方任取两个球 ...

  2. 100个黑球和100个白球问题

    100个黑球和100个白球问题 问题 思路 计算 结论推广 问题 有一个桶,里面有白球.黑球各100个,人们必须按照以下的规则把球取出来: 1.每次从桶里面拿出来两个球: 2.如果是两个同色的球,就再 ...

  3. python编程一球从100米_Python练习题 015:一颗自由落地的球

    [Python练习题 015] 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹多高? ----------------------- ...

  4. 口袋中有红、黄、蓝、白、黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。

    口袋中有红.黄.蓝.白.黑5种颜色的球若干个,每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况. 方法:(枚举) #include<stdio.h>int ...

  5. 【C】例9.12口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中先后取出3个球, 问得到3种不同颜色的球的可能取法,输出每种排列的情况

    //口袋中有红.黄.蓝.白.黑5种颜色的球若干.每次从口袋中先后取出3个球, //问得到3种不同颜色的球的可能取法,输出每种排列的情况 #include <stdio.h> int mai ...

  6. 抓球问题,红球5个,黑球7个,白球9个,随即取出12个,求其颜色组合可能性

    抓球问题,红球5个,黑球7个,白球9个,随即取出12个,求其颜色组合可能性. JavaScript编写程序 function hm1(){var a=0;for (var i=0;i<=5;i+ ...

  7. 每周算法题(从三个红球、五个白球、六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案,有1、2、3、4数字,组成无重复的三位数两个乒乓球队进行比赛,各出三人。甲队为a,b,c)

    每周算法题 文章目录 每周算法题 一.从三个红球.五个白球.六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案. 二.有1.2.3.4数字,组成无重复的三位数 两个乒乓球队进行比赛,各出三 ...

  8. 从3个红球3个白球6个黑球中任取八个有多少种搭配

    问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016年3月1 ...

  9. 数形结合彻底解决2个球100层楼摔坏的问题 .

    题目:有一栋100层高楼,从某一层开始扔下的玻璃球刚好摔坏,现有两个玻璃球,试用最简便的方法确定这个恰好摔坏玻璃球的那层. 这是一道著名的面试题目,仅写出我的思路和解法. 首先从题目得出基本思路 1. ...

最新文章

  1. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第二章 深入理解Netd
  2. mysql慢SQL探测与优化
  3. 【干货】用Axure做原型,一秒钟提高效率的必知技巧总结
  4. CentOS6.5系统重启后宕机
  5. 庖丁解牛TLD(三)——算法初始化
  6. Failed to find Build Tools revision 26.0.1
  7. matlab绘制三元位置函数,matlab – 在坐标(x,y)上用颜色z绘制(x,y,z)三元组
  8. tde数据库加密_如何将TDE加密的用户数据库添加到Always On可用性组
  9. 计算机毕业设计中用js+html+java文件下载(一)
  10. ArcGIS Maritime Server 开发教程(二)ArcGIS 海图软件系列
  11. 从MFC与ATL的男女关系说起
  12. 三次Hermite插值解析
  13. 微软官方 Windows 10 更新安装失败的解决办法
  14. id导出pdf失败_indesign导出pdf失败怎么办
  15. QBadgeView小红点的简单使用
  16. 给大家推荐几个程序员必备网站
  17. 查询电脑关机/重启记录
  18. 用Python爬取今日头条,里面的东西统统白送!
  19. 6-1 简单快速排序分数 10作者 唐艳琴单位 中国人民解放军陆军工程大学本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x)在整个数据中的排名(数据
  20. 精通特征工程 —— 2.简单得数字奇特技巧

热门文章

  1. 苹果内购噩梦条款3.1.1,知道这些小细节才不会被拒审
  2. Ubuntu上让Firefox使用Chrome最新版PepperFlash插件
  3. web网络知识(一)公网IP、内网IP
  4. 要在某一房间中两台计算机之间,关于局域网、广域网和互联网的组建和因特网的接入,回答下列问题。要在某一房间中两台计算机之间实现网络通信,下列方法不可行的是...
  5. 面试+学习+做项目+最全Java视频讲解
  6. Aid Learning更换壁纸
  7. windows下的OpenGL视频播放器开发环境
  8. LDPC译码器的FPGA实现
  9. 【bioinfo】bedtools之intersect命令参数
  10. 手机号码和姓名脱敏(加密*)