有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
来源:互联网 发布:oracle数据库试题 编辑:程序博客网 时间:2024/05/17 01:43
题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
1、每次从桶里面拿出来两个球;
2、如果是两个同色的球,就再放入一个黑球;
3、如果是两个异色的球,就再放入一个白球;
问:最后桶里面只剩下一个黑球的概率是多少?
思路1:
白球和黑球的个数都是偶数个,假设白球和黑球的个数都是2个,遍历所有情况,可以很轻松的得到,最后肯定之后剩下一个黑球,概率是100%。
思路2:找规律
使用(黑球个数, 白球个数)来表示桶中黑球和白球的个数变动,正数表示增加,负数表示减少,根据规则找规律:
1、如果每次从桶里面拿出两个白球,则应放入一个黑球:(0, -2) + (1, 0) = (1, -2);
2、如果每次从桶里面拿出两个黑球,则应放入一个黑球:(-2, 0) + (1, 0) = (-1, 0);
3、如果每次从桶里面拿出一个白球和一个黑球,则应放入一个白球:(-1, -1) + (0, 1) = (-1, 0);
从以上各种情况可以看出以下规律:
1)每次都会减少一个球,那么最后的结果肯定是桶内只剩一个球,要么是白球,要么是黑球;
2)每次拿球后,白球的数目要么不变,要么两个两个地减少;
所以,从上面的分析可以得知,最后不可能只剩下一个白球,那么必然就只能是黑球了。
思路3:数学方法
根据取球规则联想到数学中异或(XOR):
1、两个相同的数,异或等于0;
2、两个不同的数,异或等于1;
将黑球看作0,白球看作1,那么对于每次的操作可以做这样的想象:每次捞起两个数字做一次异或操作,并将所得的结果再次丢回桶中,因此最后的结果实际上相当于把所有的球都进行一次异或运算,最后所得的结果即为最后剩余的球。异或运算规律:
1)偶数个1异或,结果为0;
2)偶数个0异或,结果为0;
3)奇数个1异或,结果为1;
4)奇数个0异或,结果为0:
异或运算满足交换律。
实现代码
- 题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
- 题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来
- 有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
- 一个文件里有10万个随机正整数,按照以下规则能组合出一份新的数据
- 导入文件必须严格按照以下规则
- 来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球
- 把exe里面的资源通通取出来
- 把exe里面的资源通通取出来
- 类里面的方法要按照一定规则来写
- 把字典的key和value的值取出来,按照顺序存入到list中
- 将一个字符串数组中的字母按照以下规则排列
- 有8个一样的球,其中有一个要重一些。有一个天平,怎么称,才能2次就把重的球找出来?
- Python 把字典的key和value的值取出来,按照顺序存入到list中
- 他们把一个人们难以忍受的工具
- 把一个HashMap的值全部取出来,放到两个数组中
- 阿里巴巴面试算法题:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N
- 把一个句子中的按照标准写作打出来
- 给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来
- 后缀数组模板
- iOS-UI-基本控件之UIButton
- RFID+二维码扫描
- Unity3D Shader官方教程翻译(一)
- JDK5News
- 有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
- Cpp_动态内存分配
- 将森林转化成二叉树并在iPhone上显示
- 类和对象
- UVA 11627 - Slalom(二分)
- TQ2440,学习笔记之寻址方式
- Adroid listView 学习
- JAVA-计算器
- 【codevs2304】【BZOJ1875】HH去散步,第一次的矩阵加速DP