谁是凶手!!编程解决说谎问题!!

2024-02-09 10:50

本文主要是介绍谁是凶手!!编程解决说谎问题!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

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

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

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

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

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

根据提供的信息,我们可以列出以下推理:

  • 如果A是凶手,那么ABC说的都是假话,与已知的三个人说真话一个人说假话的事实相矛盾,所以A说的是真话,即A不是凶手。
  • 如果B是凶手,那么BC两人说的都是假话。这与已知的三个人说真话一个人说假话的事实相矛盾,所以B也不是凶手。
  • 如果C是凶手,只有C说的是假话,与已知的三个人说真话一个人说假话的事实相符。
  • 如果D是凶手,那么BD说的都是假话,与已知的三个人说真话一个人说假话的事实相矛盾,所以D不是凶手。

综上所述,我们可以得出结论:凶手是C。

以上是我们以逻辑推理的角度解决问题的方法,那么我们要如何用程序实现呢?

程序思路

1.依次得到ABCD。

按照前面的思路我们要先利用循环分别假设ABCD为凶手,我们需要依次得到ABCD。这里就可以利用我们前面学过的循环语句。我们知道ABCD在ASCII码中为连续的数字,故我们只需将A每次+1便可依次得到ABCD。代码实现如下:

int killer=0;for (killer = 'A'; killer < 'D'; killer++) {//.......}

2.将嫌疑人的说辞转化为代码

我们已经依次得到ABCD那么接下来我们便要依次判断ABCD是否为凶手,我们得利用四个人的说辞,那么我们现在需要把说辞转化为编程语言:

//A
killer != 'A';
//B
killer == 'C';
//C
killer == 'D';
//D
killer != 'D';

3.将嫌疑人说辞与基本事实进行比对

我们现在知道已知的三个人说真话一个人说假话的事实,那么根据我们先前学过的括号表达式知识,(括号表达式为真值为1,为假值为0),那么3个人说真话其括号表达式的和应该是3;那么我们就可以写出以下式子:

if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
{printf("凶手是:%c", killer);
}

4.知识链接

分支循环语句:

从零开始的C语言学习第三课:输入输出+分支循环_小林学习中的博客-CSDN博客

从零开始的C语言学习第四课:逻辑操作符+switch语句+循环语句_小林学习中的博客-CSDN博客

ASCII码:

从零开始的C语言学习第二课:C语言数据类型和变量_小林学习中的博客-CSDN博客

结果展示

#include<stdio.h>
int main()
{int killer = 0;//分别假设凶手是a,b,c,d,看谁是凶手时满足3个人说了真话,一个人说了假话for (killer = 'A'; killer <= 'D'; killer++){if ((killer != 'A') + (killer == 'A') + (killer == 'A') + (killer != 'D') == 3)printf("凶手是:%c", killer);}return 0;
}

题目不难,不要心生畏惧,试着写写看,你会有收获的。

如果能帮助到大家,我很开心,大家一起进步,加油!

这篇关于谁是凶手!!编程解决说谎问题!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694012

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错