对最近流传的IBM的一道面试题目的个人看法。

类别:软件工程 点击:0 评论:0 推荐:

原题:

村子里有50个人,每人有一条狗,在这50条狗中有病狗(这种病不传染),于是人们要找出病狗。
 
每个人可以观察其他49条狗,以判断他们是否生病,(如果有病一定能看出来),只有自己的狗不能看,观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的狗是病狗就是枪毙自己的狗(发现后必须在一天内枪毙),而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。

第一天大家全看完了,但枪没有响,到了第三天传来一阵枪声,问村里共有几条病狗,如何推算出来的?

答:三条病狗。原因如下分析。

首先要说明的是这50个人也都不知道有多少条病狗,而是根据推论来判断自己的狗是不是病狗,并且在推论的当天就把自己的狗杀掉。(据我推断是卖肉了)
1、第一天没有枪响,说明不是一条狗。并且所有的人都可以推断出病狗数量大于等于2。因为如果是一条的话,肯定那个病狗的主人会看不见一条病狗,从而推断自己的狗是病狗,并杀掉it。
2、第二天,枪依然没有响。所有的人都可以推断出病狗数量大于等于三,因为不可能是2条病狗。在第二天大家都已经知道最少有2条以上的病狗,如果是2条的话,那么那2条病狗的主人肯定只看到一条,而且他们也知道最少有2条,那么肯定会把自己的狗杀掉。所以前2天枪都没有响。
3、激动人心的第三天终于到来,枪响了。经过了2天以后,所有的人都可以分析判定最少有三条病狗了。于是在第三天,看见2条病狗的3个主人忍痛把自己的狗杀掉了。
4、不可能是4条以上的狗,因为根据推理,如果有4条狗的话,那么肯定在第四天大家才能判断出来。
呵呵,真相大白了。
程序狠简单,这里就不写了。

 

本文地址:http://com.8s8s.com/it/it35937.htm