查病狗(一面试题)

http://doublecqw.iteye.com/blog/967648

不知道啥的,链到这个帅哥的blog然后翻了一下,看到了一个面试题。

 

问题:

n个人,每人一头狗。这n头狗中并有病狗,然后每个人的都能检测出其他n-1个人的病狗(不能检测自己的)。经过推断后,如果猜测到自己的狗是病狗,就把自己的狗扑街掉!(没错,这些都足够高的IQ)

第一天没枪声,第二天也没有,第三天传来一阵阵枪声,问,有几头病狗。

 

 

答案:

病狗数(最多就是自己的检测数+1

 

1

那么,肯定有一个人A没有检测到病狗。但条件中有明确说n条狗中有病狗!

第一天,        A就会把自己的狗干掉!

2

A,B两人检测到了1条病狗,其他人都检测到了两头病狗。

第一天,        没有人杀狗的,因为大家都检测到了至少一条病狗了!

第二天,        这一天比较特殊。

 假设你是C,因为你检测到了2头病狗,所以,第二天你肯定没理由怀疑自己。

 假设你是A/B第一天都没开枪,说明病狗数不止一头,至少是两头(其实就是2头,如果是3头,那我知道能检测到2头)。但我检测的只有一头,说明,我自己的狗是病的!干掉!

(答案:3

A,B,C两人检测到了2条病狗,其他人都检测到了3头病狗。

第一天,        没有人杀狗的,因为大家都检测到了至少一条病狗了!

第二天,        没有人杀狗的,因为大家都检测到了至少2条病狗了!

第三天,        这一天比较特殊。

假设你是D,因为你检测到了3头病狗,所以,第3天你肯定没理由怀疑自己。

 假设你是A/B/C2天都没开枪,说明病狗数不止2头,至少是3头(其实就是3头)。但我检测的只有2头,说明,我自己的狗是病的!干掉!

 

……

 

n

所有狗都有病,那么,没人都检测到n-1头狗有病。

在第n-1天,大家都没有理由怀疑自己的狗。但是到了第n天,说明,至少有n条狗有病了(其实就是n头),而自己检测到只有n-1头。那就说明自己的是病狗。齐刷刷的全部枪毙!

问题是经典的逻辑推理题。问题的大致内容是:个村庄里有n户人家,每户养了。有段时间,某些了,的主人知道自己的了,而其他村民只知道自己的是健康的,但不知道其他是否生。某天,所有村民聚集在起,他们约定,如果发现的数量超过自己能确定的范围,就集体毒死所有的。村民通过观察发现了些情况,比如个村民发现至少有三条,另个村民发现至少有两条,等等。问题是,当这些观察结果出来之后,村民能否确定哪些是生的。 这个问题可以通过Python编写个简单的程序来解决。首先我们需要确定观察到的条件,然后用逻辑推理的方式去判断哪些。但是,如果是用程序来解决的话,我们通常采用穷举法,也就是遍历所有可能的情况,根据村民的观察来逐步排除不可能的情况。 这里给出个Python解决问题的简单思路: ```python def find_sick_dogs(total_dogs, observations): # 初始化所有可能的状态 for sick in range(total_dogs + 1): # 每个可能的数量 dogs = [False] * total_dogs # 假设前sick条 for i in range(sick): dogs[i] = True # 检当前假设是否与观察到的情况相符 if all(dogs.count(True) >= obs for obs in observations): return [i + 1 for i, is_sick in enumerate(dogs) if is_sick] return [] # 例如,假设总共有9条,观察结果是至少有1条,2条,3条 total_dogs = 9 observations = [1, 2, 3] sick_dogs = find_sick_dogs(total_dogs, observations) print(sick_dogs) ``` 这个程序只是个简单示例,它通过枚举所有可能的组合,并且检每个组合是否符合观察到的情况。如果找到了符合所有观察条件的组合,那么这个组合就是的编号。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值