题目:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:我不是凶手。 B说:C是凶手 C说:D是凶手。 D说:C在胡说。
3个人说了真话,1个人说的是假话
现在请根据这些信息,写一个程序来确定到底谁是凶手。
首先我看到这个题感觉没有思路,不知从何处下手,但看到答案的时候就感觉很简单了,我们先来捋一捋思路!
思路:先必须定义一个变量,变量从A一直加到D,这个就是循环的功能了,在循环里面进行判定。所有的判定加起来要等于3;
#include<stdio.h>
#include<stdlib.h>
int main()
{
char muder = 'A';
for (muder = 'A'; muder <= 'D'; ++muder)
{
if (((muder != 'A') + (muder == 'C') +
(muder == 'D') + (muder != 'D')) == 3)
{
printf("muder is %c\n", muder);
}
}
system("pause");
return 0;
}
这种题第一眼看起来无从下手,但一看答案就很简单了!
那,,,,还有别的办法吗?
我们想想:这种题似乎出现过我们的数学试卷上,我们是如何解决的呢?用的是排除法,如果A是凶手看是否符合条件,如果不符合再看B,这样一直下去,也可以找到谁是凶手,那这种方法可以用计算机实现吗?
可以的! 大家想到了吗?其实就是把 for()循环语句改成 if () 和 else()语句.分别对ABCD进行判断。写出来很繁,而且还容易出错,代码的可读性变低。