来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球
2014-09-17 18:53
1461 查看
题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
1、每次从桶里面拿出来两个球;
2、如果是两个同色的球,就再放入一个黑球;
3、如果是两个异色的球,就再放入一个白球;
问:最后桶里面只剩下一个黑球的概率是多少?
思路一:用具体的方法来进行讨论
可以用一个set(黑球,白球)来表示桶中的黑球和白球的输入
根据规则,拿出两球放入一球,每次操作桶中的球都会少一个,所以数目应该是可控的。
定义相应的数学关系表示操作:
(-2,0)+(1,0) = (-1,0) 取出两个黑球,放入一个黑球,最后相当于取出一个黑球,依此类推
(0,-2)+(1,0)=(1,-2)
(-1,-1)+(0,1)=(-1,0)
从上述推断可以看出:
1 每次操作都会减少一球,所以最后剩下黑球或者白球
2 由于白球每次操作要么不变,要么成对减少,所以最后不可能剩余一个白球,那么必然是剩余黑球了
实践操作,可以以(2,2)做一次演示
第一次操作后的情况为(1,2)或者是(3,0)
对于(1,2)第二次操作后的情况为(2,0)或者(0,2)
对于(3,0),第二次操作后的情况为(2,0)
第三步操作无论哪种情况,随后都只能为(1,0)
思路二:用抽象的方法来解决
根据上述条件,可以用异或的方法来解决:
两个同色的球,放入一个黑球,所以让黑球为0,白球为1
对每次操作其实就是捞出两个数做一次异或操作,然后将所得的结果(1或者0)丢入桶中,这样操作的过程不会改变所有球权值的异或值
异或满足结合律或者交换律,所以取球的过程就是对所有的球进行异或,就是100个1和100个0的异或过程
因此,剩下一个球的时候,桶中的权值等于厨师时刻所有球权值的异或值,也就是0,所以剩下一个球一定是黑球
实践:依然以(2,2)为例说明 所以黑球2个就代表2个数字0 白球2个代表有2个数字1
那么就是0 0 1 1
假设先取出2个白球 1 XOR 1 = 0 所以此时结果为0 0 0
取出2个黑球 结果就是0 XOR 0 = 0 所以此时结果为0 0
最后再取出两个黑球 异或结果是黑球
总结:分析复杂问题,最有效的方法就是通过简单的例子进行分析,然后根据归纳出的结论分析结果。适当的数学抽象在解决问题的过程中往往有华龙点金的作用
拓展问题:1 如果桶中黑白球各为99个 结果如何?
根据前面的总结可知,只需要对所有数字进行异或,结果为1,所以最后剩一个白球
2 如果黑白数量不定?
其实不用在乎球的数量,只需要看最后异或运算的值即可
1、每次从桶里面拿出来两个球;
2、如果是两个同色的球,就再放入一个黑球;
3、如果是两个异色的球,就再放入一个白球;
问:最后桶里面只剩下一个黑球的概率是多少?
思路一:用具体的方法来进行讨论
可以用一个set(黑球,白球)来表示桶中的黑球和白球的输入
根据规则,拿出两球放入一球,每次操作桶中的球都会少一个,所以数目应该是可控的。
定义相应的数学关系表示操作:
(-2,0)+(1,0) = (-1,0) 取出两个黑球,放入一个黑球,最后相当于取出一个黑球,依此类推
(0,-2)+(1,0)=(1,-2)
(-1,-1)+(0,1)=(-1,0)
从上述推断可以看出:
1 每次操作都会减少一球,所以最后剩下黑球或者白球
2 由于白球每次操作要么不变,要么成对减少,所以最后不可能剩余一个白球,那么必然是剩余黑球了
实践操作,可以以(2,2)做一次演示
第一次操作后的情况为(1,2)或者是(3,0)
对于(1,2)第二次操作后的情况为(2,0)或者(0,2)
对于(3,0),第二次操作后的情况为(2,0)
第三步操作无论哪种情况,随后都只能为(1,0)
思路二:用抽象的方法来解决
根据上述条件,可以用异或的方法来解决:
两个同色的球,放入一个黑球,所以让黑球为0,白球为1
对每次操作其实就是捞出两个数做一次异或操作,然后将所得的结果(1或者0)丢入桶中,这样操作的过程不会改变所有球权值的异或值
异或满足结合律或者交换律,所以取球的过程就是对所有的球进行异或,就是100个1和100个0的异或过程
因此,剩下一个球的时候,桶中的权值等于厨师时刻所有球权值的异或值,也就是0,所以剩下一个球一定是黑球
实践:依然以(2,2)为例说明 所以黑球2个就代表2个数字0 白球2个代表有2个数字1
那么就是0 0 1 1
假设先取出2个白球 1 XOR 1 = 0 所以此时结果为0 0 0
取出2个黑球 结果就是0 XOR 0 = 0 所以此时结果为0 0
最后再取出两个黑球 异或结果是黑球
总结:分析复杂问题,最有效的方法就是通过简单的例子进行分析,然后根据归纳出的结论分析结果。适当的数学抽象在解决问题的过程中往往有华龙点金的作用
拓展问题:1 如果桶中黑白球各为99个 结果如何?
根据前面的总结可知,只需要对所有数字进行异或,结果为1,所以最后剩一个白球
2 如果黑白数量不定?
其实不用在乎球的数量,只需要看最后异或运算的值即可
相关文章推荐
- 题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
- 《编程之美》中黑球,白球各100,问最后剩下一个是黑球的概率
- 算法题目------【一个桶内100个白球,100个黑球,最后一个是黑球的概率是多少?】
- 《编程之美》:黑球,白球各100,问最后剩下一个是黑球的概率
- 《编程之美》中黑球,白球各100,问最后剩下一个是黑球的概率
- 数组有100个元素,设为数组a[100],存放1-100的数值,但是现在有一个数值重复了,只扫描一遍数组,找出那个重复的数
- 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词.
- 黑球,白球各100,问最后剩下一个是黑球的概率。
- poj 3308 最小点权覆盖集, 见 胡驳涛论文里面有讲见图方法 二分图最小权点覆盖 我的想法是一个东西通过两个操作都可以完成,这些操作还可以完成其他的东西,每个操作有一个花费,现在要你选出花费最小的操作。这就是裸的模型
- 有一个1G大小的一个资料,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词
- 我现在在做一个app,里面要有聊天的功能,但是我在网上找了好多例子,我都没有运行成功,希望路过的大神能给我点指导或者源码也行
- A,B两个页面,A里面用iframe包含B,现在在A里面要取得B里面一个Hidden控件的value
- 牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼
- 有一个数据表,但是我只知道一个字段的名称。现在我想查询数据库里面的除去这个字段的所有数据!
- 现在公司里面基本上封装数据用的都是JSON,让我们来学习学习JSON提高自己的录取概率
- 苹果3元一个,鸭梨2元一个,桃子1元一个。现在想用200元买100个水果,在控制台中列出所有可能性。
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
- 阿里巴巴面试算法题:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 我的java之路1 -- 有100个不相同数,从里面随机拿出两个,现在只剩余98个数了,求找出拿掉的那两个数