论坛首页 入门技术论坛

村里有50个人,每个人有一条狗,即有50只狗……标准答案

浏览 69740 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-01-05   最后修改:2012-01-05

村里有50个人,每个人有一条狗,即有50只狗,这些狗中有病狗(不是传染病),每个人可以看除了自己的狗以外的所有狗,即49只狗。有病的狗一看就知道了,当有人推断出自己的狗是病狗的话则开枪打死自己的狗(当天知道),每人看后不准相互交流!第一天,没有枪响,第二天也没枪响,第三天,听见一阵枪响,请问村里有几只病狗?

 

 

这道题我花了两个小时思考,最后答案是此题无解,

看分析。

1·有人说三条:

理由:

这个据说是IBM的面试题,正解如下 
1.若只有1条病狗,那么该狗的主人第一天就能发现,并毙之; 

(解释:意思是说,如果有1条病狗,那么有一个人不会看到病狗,就是病狗的主人因为不能查看自己的狗,则知道自己的是病狗,简言之:“自己看到了0条,但还存在病狗,那么自己没看的也就是自己的狗,就是病狗”)
2.若只有2条病狗,设这两条狗的主人分别是A,B,第一天,A和B分别发现对方的狗是病狗,那么到第二天A和B就会明白,如果只有一条病狗,那么根据假设1第一天就会有枪声,所以自己的狗也是病的。于是第二天就会有枪响并有2条病狗; 

(解释:意思是说,A知道我看到了一条,却没有按照一条的情况处理,所以我看到的少一条病狗,也就是说我自己的是病狗,,简言之:“自己看到了一条,但是如果只有一条,但实际上有一条以上,那么自己没看的也就是自己的狗,就是病狗

3.若有3条病狗,设其主人是A,B,C,第一天A发现B和C的狗是病的,B发现A和C的狗是病的,C发现A和B的狗是病的,如果A,B,C都认为只有2条狗是病的话,那么按照假设2,第二天就会有枪响。然而第二天没有动静,那么A,B,C就会认识到自己的狗也是病的,因此第三天会有枪响,并有3条狗病。

(解释:如果三条病狗,这三条病狗的主人会看到两条病狗,认为理应按照2的情况来处理,则第二天有人开枪杀狗,但是第二天没有人杀狗,则表示不是两条,不是一条,应该是两条以上,蛋是自己看到了两条,所以自己的那条狗是病狗。) 
    依此类推,第几天有枪声,就表明有几条病狗。   不知道直接根据这条写的程序算不算

 

 

 

分析原题:

每个人可以看除了自己的狗以外的所有狗,表示每个人只能看别人的49条狗,重点是别人,则不知道别人看到自己的狗是有没有病。

有病的狗一看就知道了,当有人推断出自己的狗是病狗的话则开枪打死自己的狗(当天知道),表示没有发现病狗就不杀狗,发现病狗就杀狗,并且自己只能杀死自己的狗。

每人看后不准相互交流,表示比如A看到了2条病狗,C看到了四条病狗,A不知道C看到了4条病狗。

第一天,没有枪响,第二天也没枪响,表示第一条没有人能判断自己的狗是不是病狗,第二天发现别人都不能判断自己的狗是不是病狗。

第三天,听见一阵枪响,表示第三天有人判断自己的狗是不是病狗,但是没人知道是不是所有的病狗都死了,好狗都活着。

 

最重点问题在于:

4和5,表示第一天都看到村子还有病狗,但是不确定自己的是不是病狗,于是都回家等着没有看到病狗的人杀死自己的狗。

第一天没有枪声,这样存如下结果:

 

  • 如果所有人看到=1条病狗,那个养着病狗的人直接杀死自己的狗,毫无疑问问题解决;(否决,不符合题意)
  • 如果所有人看到>1&&<49条病狗,第一天不能判断自己的狗有没有病,都不能确定自己的狗是否有病,于是第一天不杀自己的狗;(第一天没有枪声正常)
  • 如果所有人看到=49条病狗,都不能确定自己的狗是否有病,于是第一天不杀自己的狗。(第一天没有枪声正常)
当第二天过后,依然没有枪声,这样存如下结果:
不管看到多少病狗,他们都能知道第一天没有任何人判断出那条狗是病狗,所以所有人都看到了病狗,就是在两只以上,

   发表时间:2012-01-07  
IBM雄起,这问题,哎,残害多少程序员的前途
0 请登录后投票
   发表时间:2012-01-07  
第几天有枪声,就表明有几条病狗,其实逻辑还是比较简单和NB的~~
0 请登录后投票
   发表时间:2012-01-07  
应该是三条吧,假设有四条,主人分别为A,B,C,D,每人都看见了三条病狗,前两天分析都对,关键是第三天,如果每一个主人都认为是其他三人没有分辨出自己的狗是病狗,那么第三天不应该有枪声吧,而是应该第四天,比如A认为,自己的不是病狗,之所以前天没枪声,是因为B,C,D三个人没有发现自己的是病狗,只有当第三天也没有枪声,才知道自己的狗也是病狗。所以应该是第几天有枪声就是有几条狗
0 请登录后投票
   发表时间:2012-01-08  
按照这个题目给出,我立刻就告诉你无解,并且,也没有办法用合理逻辑推论。

假设,我是50人中的一个人,我就算看到其他49条狗都病了,但是,主人之间不能交流,我一样推断不出来,或者说,我可以一样相信我的那条狗是最幸运的那个。

0 请登录后投票
   发表时间:2012-01-08  
还有,因为缺少条件,如果说是每一天只能一个主人看所有的其他49条狗,那么就好推断一些。不然这种题目本身就属于死循环的逻辑。
0 请登录后投票
   发表时间:2012-01-08  
其实人家出这个题只是看你有没有想法,和逻辑思维敏感程度。不一定要答对的。只要你能有自己的分析,并且有自己的根据就可以了。
0 请登录后投票
   发表时间:2012-01-09  
lonelybug 写道
按照这个题目给出,我立刻就告诉你无解,并且,也没有办法用合理逻辑推论。

假设,我是50人中的一个人,我就算看到其他49条狗都病了,但是,主人之间不能交流,我一样推断不出来,或者说,我可以一样相信我的那条狗是最幸运的那个。


如果你看到其他49条狗都病了,又知道“病狗至少有50条”,你就能推断出来。
建议多研究一下楼主的“标准答案”。
0 请登录后投票
   发表时间:2012-01-09  
楼主主流没把话讲完啊
0 请登录后投票
   发表时间:2012-01-09  
seedjyh 写道
lonelybug 写道
按照这个题目给出,我立刻就告诉你无解,并且,也没有办法用合理逻辑推论。

假设,我是50人中的一个人,我就算看到其他49条狗都病了,但是,主人之间不能交流,我一样推断不出来,或者说,我可以一样相信我的那条狗是最幸运的那个。


如果你看到其他49条狗都病了,又知道“病狗至少有50条”,你就能推断出来。
建议多研究一下楼主的“标准答案”。


请问你如何判断出来不是50条狗都病了?你从问题的那个逻辑推断出来的?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics