用代码来“破案"(一)

119 阅读2分钟

题目名称: 猜凶手

内容: 

日本某地发生了一桩谋鲨案,警方通过排查确定鲨人凶手必为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;
}

输出结果:

如果你觉得这道题目对你有所帮助,可以点赞或者关注支持一波哦,持续更新中!