一道老题

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:53:58
今天老师给了道题。 ##村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了第三天传来一阵枪声,问有几条病狗,如何推算得出?#### 这是ibm的面试题 都说答案是3 而且说第几天枪响就是有几只。 为什么只数一定跟天数相关?观察病狗的进度是不定的 跟天数有什么关系??

分析:1).假设只有一只病狗。此时,只有一个人没看到有病狗,其他49看到有一条病狗。看不到病狗的人马上可以推断自己的狗是病狗,所以假设不成立。因此病狗不止一只。
2)假设有两只病狗。此时,有两个人看到只有一只病狗,其余48人看到有两只病狗。第一天看完之后没有人杀狗。因此第二天看到只有一只病狗的人就可以结合假设一的结论知道狗其实不止一只,因此自己只看到一只,因此自己的狗也是病狗,然后将狗杀掉。所以假设二也不成立。因此病狗不止两只。
3)假设有三只病狗。有三个人看到有两只狗,其余47人看到有三只狗。前面两天自然没有人杀狗。到了第三天,看到只有两只狗的这三个人(根据前面推断)知道病狗不止两只,而自己已经看到两只,所以自己的狗也是病狗,然后三人一起举枪杀之。此假设与题目相符。

你们老师知不知道这个是微软公司的考试题????
解答如下:
村中有50个人,每人有一条狗。50只狗中有病狗(病不会传染)。于是人们就要找出病狗。每人可以观察其他49条够,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知并狗主人。
主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且只每个人有权利枪毙自己的狗,没权利枪毙其他人的狗。第一天第二天都没有枪响,到第三天传来一阵枪声。请问有几只病狗?
分析:
第一种推论:A、假设有1条病狗,病狗的主人会看到其他狗都没有病,那么就知道自己的狗有病,所以第一天晚上就会有枪响。因为没有枪响,说明病狗数大于1。
B、假设有2条病狗,病狗的主人会看到有1条病狗,因为第一天没有听到枪响,是病狗数大于1,所以病狗的主人会知道自己的狗是病狗,因而第二天会有枪响。既然第二天也每有枪响,说明病狗数大于2。由此推理,如果第三天枪响,则有3条病狗。第二种推论1 如果为1,第一天那条狗必死,因为狗主人没看到病狗,但病狗存在。2 若为2,令病狗主人为a,b。 a看到一条病狗,b也看到一条病狗,但a看到b的病狗没死故知狗数不为1,而其他人没病狗,所以自己的狗必为病狗,故开枪;而b的想法与a一样,故也开枪。由此,为2时,第一天看后2条狗必死。3 若为3条,令狗主人为a,b,c。 a第一天看到2条病狗,若a设自己的不是病狗,由推理2,第二天看时,那2条狗没死,故狗