用c编程简单推测谁是凶手--------培养编程思维

        hello大家好,我是c语言boom家宝。博主今天依然带来的是一个有意思的培养编程思维的题目,用c语言来推理谁是凶手。(博主上一篇博客 有讲到如何编程实现比赛的预测,有兴趣的小伙伴可以前往主页观看噢)。已知题目如下:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。

        拿到这个题目,我们可以先简单推理一下:四个人只有一个人说了假话,那先假设a说的是假话,那么a就是凶手,b说的是真话,那么凶手就是c,结果矛盾,所以a说的是真话。如果b说的是假话,那么凶手不是c,a说的真话,所以凶手也不是a,c说的是真话,所以凶手是d,d说的也是真话,那么又矛盾了。所以b说的也是真话,如果是c说的假话,那么凶手就不是d,d说的是真话,与真实情况也相符,b说的也是真话,那凶手就是c,a说的话语也是符合真实的,故可以推断出凶手就是c。至此推断结束,那如果个人推理能力不行这个又如何让电脑来帮助我们进行推断呢?

        我们把刚刚的思路转换成c语言代码就可以这样来写,先看整体代码:

用c编程简单推测谁是凶手--------培养编程思维_第1张图片

        这里呢博主 有给大家做好详细的注释,方便阅读者更好的去理解咱的代码,我就再继续赘述这个代码的逻辑思路了。但是,代码都是从“垃圾代码”逐渐精炼成“好代码”的,对程序思路不断进步,对代码不断打磨的过程就是咱程序员进步的过程。那么这个找凶手的问题我们还可以怎么做更简单呢?

        首先,我们先定义四个凶手,a,b,c,d,目标不再像上面,而是定义出来直接放进逻辑判断里,所以我们使用char类型来存放。再定义一个killer来存放我们的凶手,如下:

用c编程简单推测谁是凶手--------培养编程思维_第2张图片

        接下来就需要按照最开始的逻辑分析,我们通过不断的调整说谎的对象来分析逻辑,所以需要放在for循环里来重复执行逻辑,这里呢,我们可以直接先把a成员赋给killer,因为ASCII码值中,a,b,c,d之间的值都只相差1,我们只需要不断的再循环里自增1,十分的方便,所以这也是为什么博主直接使用它们的名字来循环的原因,

        那是如何判断谁是凶手的呢?因为在c中,0为假,非0为真,默认为1.于是我们分别把四个人说的话加起来放进if语句里,因为有三个真话一个假话,所以加起来的值就为1+1+1+0=3.注意,这个if语句里最后是==,而不是=,因为这是必然存在三真一假,我们必须得让它的值为3才符合逻辑。故此,就这简简单单的四五行代码就能解决这个问题,是不是比前面那个代码简单多啦!!

用c编程简单推测谁是凶手--------培养编程思维_第3张图片

 

 

 

 

        

你可能感兴趣的:(数学建模,c语言,c++)