病狗算题,代码

一个村子里一共30户人家,每家每户都养了1条狗。
每户人家都可以查看其他人家的狗是不是病狗,但是不准检查自己家的狗是不是病狗。
当这些人如果推断出自家的狗是病狗的话,就必须自己把自家的狗枪毙了
但是每个人在看到别人家的狗是病狗的时候不准告诉别人,也没有权利枪毙别人家的狗,
只有权利枪毙自家的狗。
第一天没有听到枪声,第二天也没有,第三天却传来了一阵枪声。
请问:这个村子里一共有几条病狗,请说明理由?
补充:所有的人都知道村子里至少一条病狗。
2015-8-12
现在终于理解了,不过这道题目很限定思维吧。
1.所有人都会去查看一遍其他人的狗,而且是每天查看一遍。
2.所有的狗是第一天就生病了?而不是之后每天逐个生病(传染导致)。
3.这道题根据现实“每个人都会侥幸认为自己的狗是健康的”却又不现实的“每个人都怀疑自己狗是生病的”,而且也忽略了传染,之后病狗逐步增加。
原谅本人第一次看到题目会有一种想法:`这些狗是逐天生病的`。。。。
UYOU
浏览 456回答 2
2回答

繁华开满天机

3条。这个题还有个条件没有说明:所有的人都知道村子里至少一条病狗。假如有1条病狗,第一天30个人都出来看其他人家的狗,病狗的主人会发现其它29条狗都是健康的,那么他知道自己的狗是病狗,所以当天就杀了。假如有2条病狗,第一天30个人都出来看其他人家的狗,两条病狗的主人会发现29条狗中有1条病狗,但是他们不知道总数有多少病狗,所以当天它们没法判断自己的狗是否是病狗,因此当天没有枪声。第二天,病狗之一的主人发现没人开枪,他马上会知道他所看到的病狗的那个主人也看到了1条病狗,然而自己在29条狗中只看到了一条,那么自己的那条狗也必是病狗,于是第二天两个病狗的主人都会回去杀死自己的狗。假如有3条病狗,第一天30个人都出来看其他人家的狗,3条病狗的主人会分别发现29条狗中有2条病狗,但是他们不知道总数有多少病狗,他们会暂认为自己的狗不是病狗。那么他会以第二条理论分析,应该在第二天结束那2条病狗的主人会杀掉他们的狗,由于三个人都会这么想,所以第二天没有人开枪。所以第二天结束,病狗的主人意识到还有一条病狗的存在且是自己的,因此第三天三条病狗的主人会分别向自己的狗开枪。。以此类推,假如有n条病狗,则枪声会在第n天响起。代码://javascriptfunctionhowManySickDogsIfGunsFiredAtDay(n){returnn;}

小怪兽爱吃肉

这个应该属于一类题:科学归纳法(没记错的话应该是)假设30人的村子里只有一只病狗,主人为A,其他人看到A的狗是病狗,但不知道自己的狗是不是病狗,所以其他人暂时不会枪毙自己的狗,而A发现其他人的狗都是好狗,在知道最少有一只病狗的情况下,他肯定能猜到自己的狗是病狗,所以,在第一天的时候,就会枪毙自己的狗,也就是第一天一声枪响。假设30的村子里只有两只病狗,主人为A,B,除了他们之外的村名,发现了他们的两只病狗,但不知道自己的狗是不是病狗,所以其他人暂时不会枪毙自己的狗,。现在A在第一天发现,其他人的狗只有一只是病狗,他没法判断自己的狗是不是病狗;同样,B也是;就这样第一天过去了,没有枪响,第二天,A发现B的病狗依然活着,他就瞬间明白了自己的狗是病狗,于是会枪毙自己的狗,同样,B也是一样,所以,第二天,两声枪响。假设。。。。所以,这个规律基本满足N只病狗,第N天N声枪响补充:两只病狗的情况,A发现B的狗还活着,会发现自己的狗是病狗的原因是,如果自己(A)的狗不是病狗,那么B看到的其他狗就是好狗,但是最少有一只病狗,所以B自己会知道自己的狗是病狗,同理,A也是一样。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript