|
某地发生一件谋杀案,经常通过排查确定凶手必为 A,B,C,D中的一个,以下是 4个嫌疑犯的供词:A 说:不是我
B 说: 是 C
C 说:是 D
D 说: C 在胡说 已知 3 个人说了真话,1 个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。
分析:可用穷举法解决。依次假设每个人都可能是凶手,那么当我们假设的情况正确时,必定会推出他们4人所说的话中有一个假,三个真的情况。也就是说,如果用 0 表示假,1 表示真,那么就会有 1 个0,3 个 1 的情况。否则,就不会产生三个 1 的一起同在的情况。
实现代码:
#include <stdio.h>
int main()
{
int i, sum=0, flag=0;
char killer;
for(i=0; i<4; i++)
{
killer = 64 + i;
sum = (killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D');
if(sum == 3) {
flag = 1;
printf("%c is the killer\n", killer);
break;
}
}
if(flag == 0)
printf("Can not find\n");
return 0;
} |
|