赞
踩
福尔摩斯接到了一个任务,需要帮助一位富有的英国贵族解决一件谋杀案。谋杀发生在他的豪宅里,在他的书房里。现场有五个嫌疑人:
家庭保姆
英国贵族
律师
司机
清洁工
福尔摩斯需要编写一个程序来帮助他推断出谋杀犯的身份。他的程序将收集一些证据,然后根据这些证据来推断出犯罪者的身份。
输入将包含五行,每行代表一个嫌疑人的信息。
名字是一个字符串,长度不超过 100 个字符。
后面三个字段都是布尔值,表示是否满足对应的条件。
输出应包含一行,表示根据输入的信息推断出的犯罪者的名字。
家庭保姆 false true false
英国贵族 true false false
律师 false false true
司机 true true false
清洁工 true true true
清洁工
解题思路:
首先读入五个嫌疑人的信息。
遍历五个嫌疑人,找出第一个满足现场、动机和机会三个条件的嫌疑人。
输出这个嫌疑人的名字。
算法设计:
由于题目只要求我们找出第一个满足条件的嫌疑人,所以这道题的算法很简单。我们可以使用一个循环遍历五个嫌疑人,如果找到了第一个满足条件的嫌疑人就直接输出,否则遍历完所有的嫌疑人后输出一个空行。
时间复杂度:
由于题目只有五个嫌疑人,所以时间复杂度是 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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。