zoukankan      html  css  js  c++  java
  • 桶中黑白球问题

    桶中黑白球问题 去年百度的笔试题目,网友说貌似是《编程之美》上面的题目。题目描述如下:

    有一个桶,里面有白球、黑球各100个,取球的规则如下:

    1. 每次从桶里面拿两个球;
    2. 如果是两个同色的球,就再放入一个黑球;
    3. 如果是两个异色的球,就再放入一个白球。

    问题是:最后桶里面只剩下一个黑球的概率是多少?

    刚开始拿到题目,首先的思路就是写程序,计算每种情况的可能……可是这个程序怎么写都迷迷糊糊的,也算不出来正确结果。后来看了书和网上的资料,才发觉思维四位僵化居然这么可怕。

    这道题目有两种比较好的解法,而且题目中球的数目不同的时候也会产生不同的结果。

    解法一: 同色球,放入一个黑球,异色球,放入一个白球。由这两句话我们可得球的数量的变化,假设原先黑、白球各100个的状态是(0,0),则我们可以用(-2,0)、(0,-2)表示取出同色的球,则取出一黑一白就可以表示成(-1,-1),则我们可得球的数量的变化情况如下等式:

    1. 取出两个白球:(0,-2)+(1,0)=(1,-2);
    2. 取出两个黑球:(-2,0)+(1,0)=(-1,0);
    3. 取出一黑一白:(-1,-1)+(0,1)=(-1,0)。

    由上式我们知道,每次取球,球的数量都是会减少一个的,所以最后必定会出现只剩下一个球的情况。然后我们观察发现白球数量的变化情况是要么少两个,要么就不变,所以最后肯定不会只剩下一个白球,那么肯定是只剩下一个黑球了,所以最后桶里面只剩下一个黑球的概率就是1.

    解法二: 多读题目几遍,同色放入一个黑球,异色放入一个白球,这个是不是跟数学里面的异或规律很像。假设我们把黑球看成是0,白球看成是1,就很符合题目要求,即: 1 XOR 1=0; 0 XOR 0=0; 1 XOR 0=1。 正如题目所说,取两个就会放一个进去,放进去的球还是有可能再被取出来。假设我们就把取球过程看成是不断的XOR运算过程,则因为XOR运算是满足结合律和交换律的,则我们就可以把这100个白球和100个黑球取出放回的过程看成:

    (0 XOR 0 XOR 0……0 XOR 0 XOR 0) XOR (1 XOR 1 XOR 1……1 XOR 1 XOR 1)=0。

    即最后的结果一定是0(黑球),则所求的概率就是1.

    由解法二中的异或等式我们可以得到,最后所得的结果取决于1(白球)的个数,若1(白球)个数是偶数,则结果为0(黑球),若1(白球个数为奇数,则最后的结果就是1(白球)。

    通过这个题目,我们在考虑问题的时候不要一味的思维僵化,不能由问题去看问题,最后把自己都绕进去了,要跳出问题圈子,从远处看问题,这样才能看出问题的真正解决办法。

  • 相关阅读:
    【转】 url中文乱码问题
    [转]Jquery 点击图片在弹出层显示大图
    JQuery获取和设置Select选项的常用方法总结
    springMVC框架下返回json格式的对象,list,map
    sqlserver数据库 表中字段值有空格,如何去除空格(例如char (5) 存入数据不足5位时sqlserver会自动补空格)
    jquery Jbox 插件实现弹出窗口在修改的数据之后,关闭弹出窗口刷新父页面的问题
    sqlserver 2008 r2 直接下载地址,可用迅雷下载
    web服务器与tomcat
    xml入门与解析
    jdbc框架-dbutils的简单使用
  • 原文地址:https://www.cnblogs.com/havePassed/p/3558807.html
Copyright © 2011-2022 走看看