百度面试题1

来源:互联网 发布:移除数组中的重复元素 编辑:程序博客网 时间:2024/06/09 21:50
No.1百度面试题
 一个桶里面有白球、黑球各100个,现在按下述规则取球:的
i 、每次从通里面拿出来两个球;
ii、如果取出的是两个同色的求,就再放入一个黑球;
ii、如果取出的是两个异色的求,就再放入一个白球。
问:最后一个球为黑球的概率是多少?
>>
>>
>>
>>

想着顺序去算,不过这么一个动态的,感觉有点纠结啊。想想从小情况入手,但好像无规律可循。
基本分析过程是,根据条件可以判断,无论什么情况每次都是少一个球。
200 。。。199.。。。198.。。。。。。3.。。。2.。。。1
就逆向思维一下吧。
如果最后一个球为 黑球的话,那么前一次一定是2黑或2白。。。额,那一步呢。。。好像回去是个无底洞啊。
那么,再看看条件暗含了什么吧。让我们观察下各色球的变化情况吧。
事件:2黑 结果:白-0,黑-2
事件:2白 结果:白-2,黑+1
事件:1黑1白 结果:白-0,黑-1
由此可见,白球无论如何都是偶数方式递减,同时得出,白球数始终为偶数的。
有什么用呢?回去验证下,黑球逆推一步似乎符合了。
既然最后一个黑球的逆推无法进行,那么如果最后一个为白球呢?
最后一个为白球——>>倒数第二次的为一黑 一白——>>再逆推。。。。额,好像也情况复杂了

等等= =好像情况不对。怎么出来了奇数数的白球呢。

是的,这是不可能的。

结论:最后一个球为白球的可能性为0,为黑球的可能性为1。 

既然是百度程序猿面试,那就应该可以编程解决,不能当概率论去做吧。


程序员的解法:
     把黑球当成0,白球当成1。1与0异或为1,同0同1异或则为0。则刚好符合条件所描述。
接而抽象为程序:
                100个黑球,100个白球,每次取两个。
                可以想象,100个1和100个0,每次随机取两个数出来异或运算,然后将结果放回(此时少了1个数)。不断重复,最后剩下一位数,代表的就是剩余的球。但是,随机怎么办呢?无论怎么打乱,根据异或运算的交换律,顺序无影响。所以可以直接相当100个1异或后,和100个零依次异或。运算结果为0。可以验证结果为黑球。
0 0