每日一练c++题目日刊 | 第八期

第一题:夏洛克侦案

题目描述

福尔摩斯接到了一个任务,需要帮助一位富有的英国贵族解决一件谋杀案。谋杀发生在他的豪宅里,在他的书房里。现场有五个嫌疑人:

家庭保姆
英国贵族
律师
司机
清洁工

福尔摩斯需要编写一个程序来帮助他推断出谋杀犯的身份。他的程序将收集一些证据,然后根据这些证据来推断出犯罪者的身份。

输入格式

输入将包含五行,每行代表一个嫌疑人的信息。

名字是一个字符串,长度不超过 100 个字符。

后面三个字段都是布尔值,表示是否满足对应的条件。

输出格式

输出应包含一行,表示根据输入的信息推断出的犯罪者的名字。

输入样例

家庭保姆 false true false
英国贵族 true false false
律师 false false true
司机 true true false
清洁工 true true true

输出样例

清洁工

解题思路&C++题解

解题思路:

首先读入五个嫌疑人的信息。
遍历五个嫌疑人,找出第一个满足现场、动机和机会三个条件的嫌疑人。
输出这个嫌疑人的名字。

算法设计:

由于题目只要求我们找出第一个满足条件的嫌疑人,所以这道题的算法很简单。我们可以使用一个循环遍历五个嫌疑人,如果找到了第一个满足条件的嫌疑人就直接输出,否则遍历完所有的嫌疑人后输出一个空行。

时间复杂度:

由于题目只有五个嫌疑人,所以时间复杂度是 O ( 1 ) O(1) O(1) 的。

下面是 c++ 代码实现:

#include <iostream>
#include <string>

using namespace std;

struct Suspect {
  string name;
  bool is_at_scene;
  bool has_motive;
  bool has_opportunity;
};

// 读入嫌疑人的信息
Suspect read_suspect() {
  Suspect suspect;
  cin >> suspect.name >> suspect.is_at_scene >> suspect.has_motive >> suspect.has_opportunity;
  return suspect;
}

int main() {
  // 读入五个嫌疑人的信息
  Suspect suspects[5];
  for (int i = 0; i < 5; i++) {
    suspects[i] = read_suspect();
  }

  // 找出犯罪者
  string murderer;
  for (int i = 0; i < 5; i++) {
    if (suspects[i].is_at_scene && suspects[i].has_motive && suspects[i].has_opportunity) {
      murderer = suspects[i].name;
      break;
    }
  }

  // 输出犯罪者的名字
  cout << murderer << endl;

  return 0;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘较瘦

打赏即动力,打赏即鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值