题目要求:
警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
算法思路:分别假设A,B,C,D是凶手,分别判断四个人的话是否是真话,当有其中三个人是真话时得出凶手是谁,因此可以利用逻辑判断语句分别判断每句话,再将四个结果加起来,由于说的是真话时相当于加1,说假话相当于加0,故当相加和为3的时候,符合三个人说真话一个人说假话。
具体代码如下:
#include<stdio.h>
int main()
{
// a说:不是我。
//b说:是c。
//c说:是d。
//d说:c在胡说
const char* str = " abcd";
int kill = 0;//凶手编号
for (kill = 1; kill <= 4; kill++)
{
if (((kill != 1) + (kill == 3) + (kill == 4) + (kill != 4)) == 3)
{
printf("%c", str[kill]);
}
}
return 0;
}
该算法中利用kill作为凶手,A是1,B是2,C是3,D是4,遍历kill=1,2,3,4,当kill=n时则n对应的人是凶手,后利用逻辑判断是否和为3,为3的则是凶手。