C语言——猜凶手
题目内容:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说 已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
将上述的实际问题转化,其实就是求满足以上三个情况,不满足一个情况就可以,因此,可以设置一个变量,每满足一个要求变量++,只有当变量为3时才满足题目所给要求,也就是唯一凶手。
代码如下:
#include <stdio.h>
//猜凶手
int FindMurder(char mu)
{
int real=0; // 满足情况加一
if(mu!='A') real++;
if(mu=='C') real++;
if(mu=='D') real++;
if(mu!='D') real++;
return real;
}
int main()
{
char murder;
printf("请输入猜测的凶手:(A,B,C,D)\n");
while(1)
{
scanf("%c",&murder);
int TrueAnswer=FindMurder(murder);
if( TrueAnswer==3 ) //判断完四种情况,只满足三种情况
{
printf("回答正确,%c是凶手...\n",murder);
break;
}
else
{
printf("猜错了,再猜一次吧...\n");
}
scanf("%c",&murder);
}
}
(遗留问题:末尾的scanf语句删除后会打印两遍else内容,不知道为什么,o(╥﹏╥)o,后面再问问别人吧)