题目要求:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
基本思路,根据题目信息,我们可以知道,在不确定谁是真正的凶手之前,四个人其中的任何一个人都有可能是凶手,所以我们可以设一个变量来表示是凶手假设变量名为murderer,让murderer从A开始循环,当四个表达式(即四人说的话)满足三个为真一个为假释,输出murderer,找到凶手后break;跳出循环即可
因为表达式的值只有0和1 ,所以我们可以将四个表达式加起来进行最终的判断,当和为3时,就表示三句话为真,一句话为假,这点和猜名次很相似
代码部分:
#include <stdio.h>
int main()
{
int murderer = 0;
for (murderer = 'A'; murderer <= 'D'; murderer++)
{
if ((murderer != 'A') + (murderer == 'C') + (murderer == 'D') + (murderer != 'D') == 3)
{
printf("%c是凶手\n", murderer);
break;
}
}
return 0;
}
运行结果: