首页 » 技术分享 » 66-甲说乙说谎,乙说丙说谎,丙说甲乙说谎

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

 
#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-甲说乙说谎,乙说丙说谎,丙说甲乙说谎,转载请注明来源!

0