66-甲说乙说谎,乙说丙说谎,丙说甲乙说谎

来源:互联网 发布:java 时间上午下午 编辑:程序博客网 时间:2024/05/01 20:47
#include <stdio.h>/*三个嫌疑犯在法官面前各执一词,甲说:乙在说谎;乙说:丙在说谎;丙说:甲乙两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,谁说的是真话?题目分析:这是一道十分有趣的逻辑推理问题。解决这类逻辑推理问题最简单直观的方法是使用穷举法。甲乙丙三人中任何人所说的话无外乎有两种可能,即真和假。如果用1表示真,用0表示假,甲乙丙三人所说的话的真假情况限定在以下范围内。*/ int main(int argc, char *argv[]){int a,b,c;for(a=0; a<2; a++)for(b=0; b<2; b++)for(c=0; c<2; c++)if((a&&!b || !a&&b) && (b&&!c || !b&&c) && (c &&a+b == 0 || !c&&a+b != 0)){printf("甲说的话是%s\n",a?"真":"假");printf("乙说的话是%s\n",b?"真":"假");printf("丙说的话是%s\n",c?"真":"假");}}


分析的过程:

 假设甲,乙,丙三个人所说的话用变量a,b,c表示,0代表说假话,1代表说真话。
我们可以列出如下的式子:
if a == 1 else b = 0
if a == 0 else b = 1
if b == 1 else c = 0
if b == 0 else c = 1
if c == 1 else a+b = 0
if c == 0 else a+b = 1

0 0
原创粉丝点击