关于微软面试“狗”的问题,我有新解了!!!

hanyh 2001-10-25 01:45:07
原题:
一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。然而所有主人和他们的狗都不能够离开自己的房子,主人与主人之间也不能通过任何方式进行沟通,他们能做的只是通过窗户观察别人家的狗是否生病从而判断自己的狗病否。(就是说,每个主人只能看出其他49家的狗是不是生病,单独看自己的狗是看不出来的)
第一天没有枪声,第二天还是没有枪声,第三天传出一阵枪声,问有多少条狗被枪杀。

我的答案:
我认为可能是4条被打死。

如果有n条狗生病,则他们看到病狗的数目应该是n或n-1;

假如只有1条狗有病的话,假设他的主人是A,则A看到其它的狗都没有病,所以知道是自己家的狗有病,所以,第一天A就应该开枪打死他的狗;

假如有2条狗有病,假设他的主人是A,B,第一天,A和B都互相看到了对方的狗有病,而其他人家的狗都没有病,注意了:A看到了B的狗有病,但是没有看到B把他的狗打死,说明B也看到有病的狗,因为其他48家的狗都没有病,那么自己的家的狗就可能有病了,不过还有一种可能,就是现在B正在看其它的狗,还没有浏览完所有的狗;但是B现在也看到了同样的问题。这样可能会出现3种情况:
1、A,B同时把自己的狗打死,因为他们都知道对方的狗有病,但是不确定自己的狗是否有病,但是为了以防万一,还是打死为妙;
2、A把自己家的狗打死。因为他确定B也看到了有狗生病,而B之外的狗都没有病,那一定是自己家的狗了;
3、B把自己家的狗打死。原因同上。

但是第2,3种情况不能把有病的狗全部打死,因为这中间有一个时间差,一旦其中有一个人把狗打死后,另一个人可能会以为他看到别人的狗都是没有病的(当然包括自己的)。所以应该有一个约定:如果当时能够判断自己的狗有病的话,就立即打死。在第一天晚上23点59分59秒的时候,大家可能都已经把另外49家人的狗的状态都看了一遍,都知道了别人家的狗是否生病。在这之前,因为没有枪声,说明A,B自己都不确定自己的狗有病,所以A,B都知道了不仅仅是对方的狗有病,而其他的狗都没有病,所以只有自己的狗有病,因而就可以确定了,所以在第二天0点0分0秒的时候,就应该听到2声枪响。

假如有3条狗有病的话,假设他们的主人是A、B、C,因为第一天他们已经把所有的狗的状态都看过了,所以他们就只需要考虑什么时候该听到枪声,和什么时候应该开枪打死自己的狗的问题。经过上面的分析,A想到:我看到了2条狗有病,如果只有B,C两条病狗的话,第二天0点0分0秒的时候就应该听到他们开枪,因为那个时候他们就可以确定自己的狗肯定有病,而条件是一旦确定狗有病的时候就立刻开枪打死狗。但是如果那个时候没有听到枪声,说明有病的狗不只是2条,当然就只有自己这一条了。而B,C两人也是这么想的,所以在0点0分0秒以后的不久,他们3人都可以确定自己家的狗有病了,所以不久后就可以听到他们人开枪的声音。

而假如是4条病狗的话,病狗的主人知道如果第二天0点0分0秒以后的不久没有听到另3人开枪的话,自己的狗或许就有病了,但是这个不久是多长时间,没有一个具体的约定,但是他最多会等到第三天的0点0分0秒,因为在一秒前他没有听到枪声的话,就说明病狗不会只有3条了。

总之,如果是5条病狗的话,会在第三天0点0分0秒后的不久听到枪声。
在第n天听到枪声,如果是在那天的0点0分0秒时开枪的话,就应该有2n-2条狗被杀,如果是在其他时间,就应该有2n-1条狗被杀。
...全文
548 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
凯文 2001-11-01
  • 打赏
  • 举报
回复
问题应该是假设主人看不到自己的狗吧。
同意是三只,一天应该当作一个时间片,即每天只能看一眼所有的狗,然后做判断。而且每个人的看狗和判断时间都是相同的。这样的话,按逻辑推理,三只是正确的。
如果没有这个限制,有先后的话,就没有狗会被杀了。
不过知不知微软认为这种题目应不应该有唯一的正确答案。否则还可以从心理学考虑。^_^可能每个主人发现后都自杀了呢!哈哈哈哈哈哈哈哈!
lxp981818 2001-11-01
  • 打赏
  • 举报
回复
自以为是,别做些这样的事。
fence 2001-10-31
  • 打赏
  • 举报
回复
假设只有一只狗生病,那么第一天那个病狗的主人发现别人家的狗都没病,必然
就把自己的狗给杀了,第一天没枪声,说明至少有两只狗生病。
假设只有两只狗生病,那么第二天那两个病狗的主人发现别人家只有一只狗生病,
必然把自己的狗给杀了,第二天没枪声,说明至少有三只狗生病。
第三天有枪声,说明有三只狗生病,因为这样那三只病狗的主人发现别人家只有
两只狗生病,从此判断自己的狗也生病了,于是杀掉自己的狗。
因此有三条狗被杀。

~~~~~~~~~~~~~~~~~~~~~~~~~~~


3
基本假定:
确实有狗病了。every onwer is smart.

分析(ill dog=ig)
if ig=1, the owner of the dog kill his/her dog in the first day, since he/she
finds there is no ill dog outside his house.

if ig=2, no body kills the dog in the first day, because they see at least
1 ig outside the their house.
the next day, everyone knows ig<>1, so if ig=2, the onwers of the two igs will
kill his/her dos. so ig<>2.

ig=3 following ig=2's analysis, the third day, everone knows that ig<>1 or 2,
the three onwers of the igs kill their dogs one by one or in the same time,
because each of them see two igs outside.

so three dogs are killed.

ig=3 following ig=2's analysis, the third day, everone knows that ig<>1 or 2,
the three onwers of the igs kill their dogs one by one or in the same time,
because each of them see two igs outside.

so three dogs are killed.
zhutousan 2001-10-31
  • 打赏
  • 举报
回复
3
lsaturn 2001-10-31
  • 打赏
  • 举报
回复
我觉得应该加上只能在一天的固定的时间杀狗才更有意思
lyneville 2001-10-31
  • 打赏
  • 举报
回复
你的答案是错的。
EP外星人 2001-10-31
  • 打赏
  • 举报
回复
兄弟你的牛角钻的可不够浅
ifrank 2001-10-31
  • 打赏
  • 举报
回复
你的解释有些不对劲啊
vanluns 2001-10-31
  • 打赏
  • 举报
回复
是微软的题?
果然横有意思
hanyh 2001-10-30
  • 打赏
  • 举报
回复
up^^^^
hanyh 2001-10-27
  • 打赏
  • 举报
回复
这叫严密的逻辑思维,呵呵~~
feihong0233 2001-10-27
  • 打赏
  • 举报
回复
除非他打的是别人的狗,
太坏了,
打狗也不看主人。
feihong0233 2001-10-27
  • 打赏
  • 举报
回复
如果不出屋的人能用枪打死狗,
也一定能看到狗!
970361 2001-10-27
  • 打赏
  • 举报
回复
我觉得主人每天只能看一次狗吧
dongmen 2001-10-26
  • 打赏
  • 举报
回复
你想太多了拉
Jazzlover 2001-10-26
  • 打赏
  • 举报
回复
无聊。你这不是解题之道。
xiaodongzi111 2001-10-26
  • 打赏
  • 举报
回复
对于这种题目应该圆滑一点的
应该猜测出题
着的意图
xyz_mw 2001-10-26
  • 打赏
  • 举报
回复
钻牛角,自以为是!!
flagfly 2001-10-26
  • 打赏
  • 举报
回复
有点钻了
xiaodaoren 2001-10-25
  • 打赏
  • 举报
回复
有意思,看看
加载更多回复(5)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧