思维训练

概率智力练手题

2009年11月15日 阅读(450)

 转载请注明作者:phylips@bmy 出处:http://duanple.blog.163.com/blog/static/70971767200910158392605/

概率部分

1.某城市发生了一起汽车撞人逃跑事件,该城市只有两种颜色的车,蓝15%绿85%,事发时有一个人在现场看见了,他指证是蓝车,但是根据专家在现场分析,当时那种条件能看正确的可能性是80%那么,肇事的车是蓝车的概率到底是多少?

[解答]设总车数为X,首先他看到的是蓝车,这点已经是既定事实,所以是个条件概率。当然实际也可能不是蓝车,所以我们看蓝车的总数目,也就是说我们先找出这X辆车里,会被当成蓝车的概率上的数目。

实际上就是蓝车看正确+绿车看错误的个数:=(85%×20%+15%*80%)*X。这里面要注意,绿车也可能被看成蓝车,所以并不是说他看到蓝车的概率就是80%
而这里面真正的蓝车只有(15%*80%)*X,所以是蓝车的概率为:15%*80%*X/(85%×20%+15%*80%)*X

2.已知明天下雨的概率是80%,求明天早上(0-8时)下雨的概率。
[解答](1-x)^3 = 1-80%

3.一个人有两个小孩儿,其中有一个生于星期二的男孩儿。问另一个是男孩儿的概率是多少?

[解答]实际上又是一个条件概率,也就是说在一个是男孩且生于星期二的条件下,另一个是男孩的概率。

这种问题我们就要首先分析问题的全体,然后分析符合条件的情况数,然后再从这些情况中寻找题目的要求

首先全体可以用一个四元组来表示[第一个孩子性别,出生天,第二个孩子性别,出生天],总共有2*7*2*7个情况,这些情况是等概率的。

其中符合"有一个生于星期二的男孩儿"的情况有:一共是14+13=27种。周二男是第一个孩子的话有14种情况,周二男是第二个孩子的话也有14种,但是这里有一种可能重复算了两次,即周二男+周二男同时属于两种,因此需要刨去这种可能。

再看在这个条件下,另一个是男孩的,也就是两个都是男孩的情况是7+6=13种,所以最终概率是13/27。

4.四个人打桥牌。其中一个人说,我手上有一个A。请问他手上有不止一个A的概率是多少?

5.四个人打桥牌。其中一个人说,我手上有一个黑桃A。请问他手上有不止一个A的概率是多少?

 

智力题目

1.如果你有无穷多的水,一个3夸脱的和一个5夸脱的提桶,你如何准确称出4夸脱的水?

[解答]这个很简单,首先3为空,5为满,将5倒入3,这样5就剩下2,然后将3清空,将5里的2倒入3,这样3还可以再装1夸脱,然后将5装满,倒出1,就剩4了。

实际上这里面包含了一个通用模型:隐式图的状态搜索。我们用两个桶里的水的含量(a,b)作为状态,每个状态可以经过下面几个操作转向其他状态,很明显可能的状态数是有限的,肯定小于 4*6个,(因为容量为3的那个可能取值有4个0,1,2,3;容量为5的有6种可能,所以组合起来最多4*6种状态)。将a注满,将a倒空,从a倒入 b;将b注满,将b倒空,从b倒入a;当然具体操作起来有些状态这些操作是非法的就不进行。这样状态及转换方式都有了,然后进行一个广度优先搜索即可,同时保存已经到达过的状态,防止无限搜索。

2.一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

3.有23枚硬币在桌上,10枚正面朝上。假设别人蒙住你的眼睛,而你的手又摸不出硬币的反正面。让你用最好的方法把这些硬币分成两堆,每堆正面朝上的硬币个数相同。
[解答]方法:把硬币都竖起来。。。。

真正的解决方法是这样的:取出10枚硬币,将它们反过来作为一堆就可以了。为什么呢?假设这10枚里有x枚朝上,则剩下的那部分有10-x个朝上,当我们把这1枚反过来后,朝上的也变成了10-x枚。

4.中国剩余定理

5.切割一个正方体,最少切多少刀,能使表面为原来的2倍
[解答]2刀,如果你普通算 最多切 4*根号2,但是你可以第一刀切完 第二刀的时候 把第一刀的两个螺起来切。

6.大圆半径是5,小圆半径是1,小圆在大圆外侧滚动,相对无滑动,小圆绕大圆公转一圈,小圆自转几圈

[解答]6,拿个硬币试下可以发现,用一个硬币绕另一个转动一周,这个硬币实际转了两圈。注意这种与常觉不同的问题。

7.有一个天平,没有游码,有2克,7克两个砝码,有一堆沙子重140克,分两次称重,分为100克与40克。怎么分法?

[解答]首先利用2克的砝码,将140分成71和69,然后再利用2+7=9克砝码将71分成31和40即可。

练手实现

1.有一个数组char array[n],编写void malloc(int i),模拟内存分配。

2.有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么? http://www.javaeye.com/topic/16521

3.中缀表达式转换为后缀表达式

[解答]

1),关键是比较运算符的优先级,谁的优先级高,谁就出现在前面上面的表达式中,有括号的时候括号优先级最高,*/次之,+-最后.

2),遇到操作数的时候总是直接输出,不做任何比较

3),遇到左括号总是直接入栈,遇到右括号的时候总是弹栈,一直弹到遇到一个左括号

4),遇到操作符的时候就先将这个操作符和它前面的操作符比较优先级,假如高于前面的优先级,先将它压栈,假如低于或等于前面的操作符的优先级,就把前面的优先级比它高的或相等的顺序弹出来, 一直弹到遇到优先级比它还低的或者到了栈顶

You Might Also Like