带你刷 · C语言 | 猜凶手

简介: 问:警察通过排查确定杀人凶手必为`4`个嫌疑犯的一个以下为`4`个嫌疑犯的供词:`A`说:不是我`B`说:是`C``C`说:是`D``D`说:`C`在胡说已知`3`个人说了真话,`1`个人说的是假话现在请根据这些信息,写一个程序来确定到底谁是凶手

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....


@TOC


题目

问:
警察通过排查确定杀人凶手必为4个嫌疑犯的一个

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

A说:不是我

B说:是C

C说:是D

D说:C在胡说

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

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

输入描述:

输出描述:
输出为一行


解法

1. 确定思路

  • 首先,我们观察到凶手名都是字符型,而且ASCII码值是连续的
  • 根据猜运动员名次的那题,再根据这题“已知3个人说了真话,1个人说的是假话”,我们想到再次用1为真,0为假的方法,把凶手说的话的真假情况直接相加
  • 咱们就根据每个凶手说的话翻译成代码试试看

2. 编写代码

  • 根据上述思路,观察到凶手名都是字符型,而且ASCII码值是连续的,我们定义一个字符型变量killer来表示凶手,用来储存每个凶手的名字,再构造一个循环
对应代码:
    for (killer = 'A'; killer <= 'D'; killer++)
    {
        //......
    }
  • 然后根据 ==“已知3个人说了真话,1个人说的是假话”,我们想到再次用1为真,0为假的方法,把凶手说的话的真假情况直接相加==来构造判断条件
对应代码:
if ((killer != 'A') + (killer == 'C')+ (killer == 'D') + (killer != 'D') == 3)
{
    printf("凶手是%c\n", killer);
}
整体代码就是:
#include<stdio.h>
//猜凶手
int main()
{
    int killer = 0;
    for (killer = 'A'; killer <= 'D'; killer++)
    {
        if ((killer != 'A') + (killer == 'C')
            + (killer == 'D') + (killer != 'D') == 3)
        {
            printf("凶手是%c\n", killer);
        }
    }

    return 0;
}
  • 看看输出结果怎么样:

在这里插入图片描述

  • 想要验证该结果,其实可以使用假设法,假设其中一个是凶手,再用这个条件(“已知3个人说了真话,1个人说的是假话”)来判断

在这里插入图片描述

相关文章
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
87 0
|
6月前
|
C语言
C语言第四十七弹---猜凶手
C语言第四十七弹---猜凶手
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
76 0
|
C语言
【C语言练习】求名次、找凶手
【C语言练习】求名次、找凶手
78 0
|
C语言
C语言:猜凶手
题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。
107 0
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
69 0
|
算法 C语言 C++
【C语言每日一题】——猜凶手
猜凶手🙌 题目内容 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。
185 0
|
C语言
C语言题解:谁是凶手!
C语言题解:谁是凶手!
251 0
C语言题解:谁是凶手!
|
C语言
【C语言走进现实】猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
|
C语言
C语言解决 猜凶手问题 两句话矛盾必有一真一假类问题
C语言解决 猜凶手问题 两句话矛盾必有一真一假类问题
114 0
C语言解决 猜凶手问题 两句话矛盾必有一真一假类问题