对一道逻辑题的思考和疑惑
程序员文章站
2022-07-14 19:22:10
...
问题:
有甲、乙两人,其中,甲只说假话,而不说真话;乙则是只说真话,不说假话。但是,他们两个人在回答别人的问题时,只通过点头与摇头来表示,不讲话。有一天,一个人面对两条路:A与B,其中一条路是通向京城的,而另一条路是通向一个小村庄的。这时,他面前站着甲与乙两人,但他不知道此人是甲还是乙,也不知道“点头”是表示“是”还是表示“否”。现在,他必须问一个问题,才可能断定出哪条路通向京城。那么,这个问题应该怎样问?
假设点头表示”是”, 摇头表示”否”.
有一个参考答案是: 问路人站在其中的一条路上, 分别问甲和乙:”假如我问他这条路能到京城吗,他会怎么回答?(问法1)”.
这个问法挺巧妙的.假如路人站的那条路可以通向京城:
对于问题” 这条路能到京城吗(问法2)”,甲会摇头,乙会点头.
而对于问法1:”假如我问他这条路能到京城吗,他会怎么回答?”, 甲和乙都会摇头.
若路人站的不是通往京城的路,则甲乙两人都会点头.
通常情况下所有人在第一时间都会想到问法2, 但又会马上否定此问法,因为明显行不通.
那么, 问法1和问法2 在本质上有何不同呢?
在这个问题里,只说假话的甲就像是一个封装了取反操作的函数. 路人所得回答的真假性就是这个函数的处理对象.每调用一次甲的回答,真假性就颠倒一次.
通过问法1, 路人在向甲和乙询问答案的过程中,都分别调用了一次甲的回答, 所得答案的真假性都颠倒一次. 产生的结果是:对所得答案的真假性判断与谁是甲谁是乙毫无关系.而问法2只在询问甲的过程中调用了一次甲的回答, 使得谁是甲谁是乙直接关系到对答案的真假性判断.
所以,若’点头表示”是”, 摇头表示”否”’这个假设成立的话, 当甲乙两点头时,路人应该走另外一条路, 反之,则走所在的这条路.
可问题是,题目中说不知道“点头”是表示“是”还是表示“否”,那么这又如何判断呢.所以, 想请大家为我解一下惑, 究竟是题目不合理,还是有我没考虑到的地方?
有甲、乙两人,其中,甲只说假话,而不说真话;乙则是只说真话,不说假话。但是,他们两个人在回答别人的问题时,只通过点头与摇头来表示,不讲话。有一天,一个人面对两条路:A与B,其中一条路是通向京城的,而另一条路是通向一个小村庄的。这时,他面前站着甲与乙两人,但他不知道此人是甲还是乙,也不知道“点头”是表示“是”还是表示“否”。现在,他必须问一个问题,才可能断定出哪条路通向京城。那么,这个问题应该怎样问?
假设点头表示”是”, 摇头表示”否”.
有一个参考答案是: 问路人站在其中的一条路上, 分别问甲和乙:”假如我问他这条路能到京城吗,他会怎么回答?(问法1)”.
这个问法挺巧妙的.假如路人站的那条路可以通向京城:
对于问题” 这条路能到京城吗(问法2)”,甲会摇头,乙会点头.
而对于问法1:”假如我问他这条路能到京城吗,他会怎么回答?”, 甲和乙都会摇头.
若路人站的不是通往京城的路,则甲乙两人都会点头.
通常情况下所有人在第一时间都会想到问法2, 但又会马上否定此问法,因为明显行不通.
那么, 问法1和问法2 在本质上有何不同呢?
在这个问题里,只说假话的甲就像是一个封装了取反操作的函数. 路人所得回答的真假性就是这个函数的处理对象.每调用一次甲的回答,真假性就颠倒一次.
通过问法1, 路人在向甲和乙询问答案的过程中,都分别调用了一次甲的回答, 所得答案的真假性都颠倒一次. 产生的结果是:对所得答案的真假性判断与谁是甲谁是乙毫无关系.而问法2只在询问甲的过程中调用了一次甲的回答, 使得谁是甲谁是乙直接关系到对答案的真假性判断.
所以,若’点头表示”是”, 摇头表示”否”’这个假设成立的话, 当甲乙两点头时,路人应该走另外一条路, 反之,则走所在的这条路.
可问题是,题目中说不知道“点头”是表示“是”还是表示“否”,那么这又如何判断呢.所以, 想请大家为我解一下惑, 究竟是题目不合理,还是有我没考虑到的地方?