#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代表说真话。
转载自原文链接, 如需删除请联系管理员。
原文链接:66-甲说乙说谎,乙说丙说谎,丙说甲乙说谎,转载请注明来源!