题目名称: 猜凶手
内容:
日本某地发生了一桩谋鲨案,警方通过排查确定鲨人凶手必为4个嫌疑犯中的一个
以下为4个嫌疑犯的供词:
A说:不是我
B说:是C
C说:是D
D说:C在胡说
已知3个人说了真话,1个人说的是假话,跟据这些信息,写一个程序来确定到底谁是凶手
其实这道题如果放在现实生活中要我们自己去推理的话,我相信各位用不了多久就会得出凶手是谁,但这道题的要求是要我们通过代码来实现,那么遇到这种题目我们应该怎么解决呢?
充分利用题目所给的信息:
已知3人说真话,1人说假话,那么只要我们依次假设ABCD四个人是凶手,再判定ABCD四个人说的话是否符合3真1假的情况,若符合,则假设的那个人就是凶手;若不符合,则换下一个。
分析如下:
如图可知,满足条件**(3真1假)**的只有当C为凶手时这一种情况,则C就是杀人凶手。
那么用代码怎么实现?
代码思路:
运用for循环,先假设A是凶手(killer='A') ,再通过ABCD四个人说的话写4条判断语句判断真假,如果这四个判断语句最后的返回值的和等于3**(3真1假)**,则此人就是凶手,若和不等于3,则换下一个,假设B是凶手(killer++),以此类推,直到满足条件为止。(具体代码如下)
#include<stdio.h>
int main()
{
char killer = 0;
//相邻的字符ASCLL值差1
for (killer = 'A'; killer <= 'D'; killer++)
{
//若和为3,则killer就是凶手;若不是,则换下一个(Killer++)
if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
{
//A:不是我 B:凶手是C C:凶手是D D:C在胡说
printf("凶手是:%c\n", killer);
}
}
return 0;
}
输出结果:
如果你觉得这道题目对你有所帮助,可以点赞或者关注支持一波哦,持续更新中!