本文主要是介绍【100题】第二十二 推理题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌(每人头上贴两张)
A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,
A说不知道,B说不知道,C说不知道,然后A说知道了。
请教如何推理,A是怎么知道的。如果用程序,又怎么实现呢?
思路:目的是推导出A的颜色,由于A先看B、C,则应先假定B、C的颜色然后推导A
分析:头上可能出现的牌为 bb、rr、rb(blue 、red)
A:不知道 说明 B 、C中颜色相加没有等于4的牌
B:不知道 说明 A、C中颜色相加没有等于4的牌
C:不知道 说明 A、B中颜色相加没有等于4的牌
过程:1> B:rr(bb) C:rr(bb) A肯定知道,所以不符合要求
2>
B:rr(bb) C:bb(rr) A不知道,由于B不知道,C不知道 所以A只能取 rb
3> B:rr C:rb C不知道->A不是rr A若是bb ->C根据A、B判断可以知道自己为rb,但C不知道,所以排除bb A=rb
B:bb C:rb 同理可证A=rb
B:rb C:rr 同理可证A=rb
B:rb C:bb 同理可证A=rb
4> B:rb C:rb 如果A=rr B=rb C猜如果自己=bb 则B不可能不知道自己为rb 所以C可以猜到C=rb
如果A=bb B=rb 同理C可以猜到自己=rb
由于A排除了rr bb 所以只能取 A=rb
这篇关于【100题】第二十二 推理题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!