本帖最后由 天马行空 于 2014-12-11 11:38 编辑
ls已经说了一个答案了(虽然我没有全都细看检查)..
总之ta的方法,关键是第一个问题要找出一个不是 时真时假 的精灵.
下面详细分析并给出一种得到有此效果的问题的一个算是机械式的通法的方法..(好绕口..)
(其实我记得我以前在这里就用过这样的方法..(好像就是解这个题目....)不过好像没具体说怎么得出来的..)
先假定它们作出的回答是"是/否",也就是说假设我已经知道DA/YA的意思了.
记三只分别是ABC.
对于它们的身份,有6种情况.- 我希望问A一个形式为"你们的身份是否在S中"的问题(其中S是6种情况的一个子集),使得我可以通过A的回答找到一只不是时真时假的精灵.
复制代码 显然无论如何我都不可能得出"A不是时真时假"的结论,所以找到的只能是B或C.显然对"是""否"两种回答我找到的精灵不可能是同一只,所以,wlog,- 我希望A回答"是"时B不是时真时假,A回答"否"时C不是时真时假.
复制代码A真,B假,C真假 | A真,B真假,C假 | A假,B真,C真假 | A假,B真假,C真 | A真假,B真,C假 | A真假,B假,C真 | a | b | c | d | e | f |
(为方便表述,用abcdef表示6种情况.)
那么,我希望找到一个S,使得仅在{acef}时A回答"是",仅在{bdef}时回答"否";即在{ac}时A回答"是",在{bd}时A回答"否".
于是,考虑到abcd时A说话的真假,必须有ad属于S,且bc不属于S.
(当然,ef中A说的话本来就没个准,而BC都不是时真时假,所以ef是否属于S并不重要.也就是说,S可以有4种选择.)
我已经分析完了.
综上,我们可以问A这样一个问题:如果A说"是",那么B不是时真时假;如果A说"否",那么C不是时真时假.
ps.插一句题外话..我们还可以稍微进行化简..比如说下面这两个问题等价,并起到同样效果:- (A真B假C真假)或(A假B真假C真)或(A真假B假C真)吗?
复制代码 回到原题..别忘了原题中的回答"DA/YA"我们并不知道含义.
没关系,只要将问题"Q"换成类似"Q xor (DA表示否)"的形式即可化归.
至于后两个问题,我们只要问找出来的精灵"DA和DA意思一样吗"(随便给个恒真命题),"A是时真时假吗"即可(同样需要化成上述形式).
综上,我们给出一个完整解:- 第一个问题,问A:"((B假 或 C真)xor(DA表示否))吗?"
- 若A回答"DA",则后两个个问题问B;若A回答"YA",则后两个个问题问C.
- 第二个问题:"(你对(DA和DA意思一样吗)的回答是"是"的意思)xor(DA表示否))吗?"
- 第三个问题:"(A是时真时假)xor(DA表示否))吗?"
复制代码DDD | DDY | DYD | DYY | YDD | YDY | YYD | YYY | A真假
B真
C假 | A假
B真
C真假 | A真
B假
C真假 | A真假
B假
C真 | A真假
B假
C真 | A假
B真假
C真 | A真
B真假
C假 | A真假
B真
C假 |
|