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

文章目录

  • 第一题:夏洛克侦案
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入样例
    • 输出样例
    • 解题思路&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 
#include 

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;
}

你可能感兴趣的:(c++,算法,开发语言)