【C语言逻辑题】谋杀案凶手是谁?——经典矛盾推理题详解

一、题目背景

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

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

  • A说:不是我。
  • B说:是C。
  • C说:是D。
  • D说:C在胡说。

已知3个人说了真话,1个人说的是假话,请根据这些信息,确定谁是凶手。

──────────────────────────────────────────────────

二、手算推理:利用矛盾关系快速锁定凶手

1. 核心矛盾点

C说"凶手是D",D说"C在胡说"(即"凶手不是D"),这两人的证词完全矛盾,必然一真一假。

2. 锁定假话者

题目中明确只有1个人说假话,因此假话必然在C和D之间,剩下的A和B说的一定是真话。

3. 推导结论

  • A说"不是我"为真 → 凶手不是A。
  • B说"是C"为真 → 凶手就是C。

4. 验证结果

此时四人的真假情况:

  • A:真
  • B:真
  • C:假(凶手不是D)
  • D:真(C确实在胡说)

✅ 完全符合"3真1假"的条件,推理成立。

──────────────────────────────────────────────────

三、C语言暴力枚举解法(适合新手理解)

思路说明

枚举A、B、C、D四人,依次假设他们是凶手,统计此时真话的数量,找到满足"3真1假"的那个。

完整代码

#include <stdio.h>

int main()
{
char killer; // 凶手变量,枚举A~D

// 依次假设A、B、C、D是凶手
for (killer = 'A'; killer <= 'D'; killer++)
{
int truth_count = 0; // 统计真话数量

// 1. A说:不是我
if (killer != 'A')
truth_count++;

// 2. B说:是C
if (killer == 'C')
truth_count++;

// 3. C说:是D
if (killer == 'D')
truth_count++;

// 4. D说:C在胡说(即凶手不是D)
if (killer != 'D')
truth_count++;

// 找到真话数为3的情况,输出凶手
if (truth_count == 3)
{
printf("凶手是:%c\n", killer);
break;
}
}

return 0;
}

运行结果

凶手是:C

──────────────────────────────────────────────────

四、代码逐行解析

|----------------------------------------------|---------------------|
| 代码片段 | 功能说明 |
| for (killer = 'A'; killer <= 'D'; killer++) | 循环枚举4个嫌疑犯,每次假设一人是凶手 |
| if (killer != 'A') truth_count++; | 验证A的证词是否为真,是则真话数+1 |
| if (killer == 'C') truth_count++; | 验证B的证词是否为真,是则真话数+1 |
| if (killer == 'D') truth_count++; | 验证C的证词是否为真,是则真话数+1 |
| if (killer != 'D') truth_count++; | 验证D的证词是否为真,是则真话数+1 |
| if (truth_count == 3) | 找到满足"3真1假"的凶手,输出结果 |

──────────────────────────────────────────────────

五、拓展与总结

****1. 解题技巧:****遇到矛盾关系的证词,优先用"矛盾法"缩小范围,比暴力枚举效率更高。

****2. 编程思路:****把逻辑题转化为代码的核心,就是将自然语言的证词转化为可计算的布尔表达式。

****3. 易错点提醒:****暴力枚举时,要确保覆盖所有可能的凶手,避免遗漏或逻辑错误。

相关推荐
KaMeidebaby6 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
8Qi87 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
bIo7lyA8v7 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
科研online7 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy8 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
三品吉他手会点灯8 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
VkN2X2X4b8 小时前
算法复杂度的实验验证与误差分析的技术8
算法
其利天下技术8 小时前
风扇灯无刷电机自适应算法实战指南
算法·cocos2d·无刷电机自适应算法·bldc驱动自适应算法·其利无刷电机驱动算法
8Qi89 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
hujinyuan201609 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法