面试题:猜牌问题

来源:互联网 发布:bloom filter java 编辑:程序博客网 时间:2024/04/28 18:06

题目:有4 张红色的牌和4 张蓝色的牌,主持人先拿任意两张,再分别在A、B、C 三人额头上贴任意两张牌,A、B、C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A 说不知道,B 说不知道,C 说不知道,然后A 说知道了。

请教如何推理,A 是怎么知道的。如果用程序,又怎么实现呢?

解答:这种题目重在分析的时候要头脑清醒,分类清楚。根据题目意思可知一个人额头上的贴牌只有三种情况:BB,RR,BR(B表示蓝色,R表示红色)。分为以下几种情况讨论:

1.B,C全是一种颜色,即:

 B     C

BB   BB

或者

 B     C

RR   RR

这是不可能的,因为如果是这种情况,那么A可以在一开始就猜出自己是RR或者BB(只剩下B颜色或者只剩下R颜色)


2.B,C是一对相反的颜色,即:

 B     C

BB   RR

或者

 B     C

RR   BB

此时A也不可能为BB或者RR,因为如果是这样的话,那么和1同样的理由,B或者C在一开始就可以猜出来,而不会说自己不知道。所以此时A为BR。


3.B,C之中有一个为BR,另一个为BB或者RR,即:

 B     C

BR   RR

或者

 B     C

BR   BB

或者

 B     C

BB   BR

或者

 B     C

RR   BR

此时A为BB/BR,RR/BR,RR/BR,BB/RR分别对应上面四种小情况。以B为BR,C为RR,A为BB/BR为例,假如A为BB,那么类似于2中的情况,当A和C说完自己不知道后,B此时肯定能判断出自己就是BR,而不是A说出来,所以此时这种情况要排除,A只能为BR。


3.B,C都为BR,另一个为BB或者RR,即:

 B     C

BR   BR

此时A有三种可能BB/RR/BR,如果A = BB,此时C听到A和B说不知道,那么他会想,假如自己是BB或者RR,那么B看到的情况就类似于前面所述的1或者2。那么B必然可以判断出自己的颜色,而不会说自己不知道。所以C此时是知道自己是BR的,不会说不知道,所以A不能为BB,同理,A也不能为RR,所以A为BR。


0 0
原创粉丝点击