刷题 | 猜凶手

大家好,我是12月的肖邦。欢迎关注!



题目

问:
警察通过排查确定杀人凶手必为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个人说的是假话”)来判断

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值