福尔摩斯接到了一个任务,需要帮助一位富有的英国贵族解决一件谋杀案。谋杀发生在他的豪宅里,在他的书房里。现场有五个嫌疑人:
家庭保姆
英国贵族
律师
司机
清洁工
福尔摩斯需要编写一个程序来帮助他推断出谋杀犯的身份。他的程序将收集一些证据,然后根据这些证据来推断出犯罪者的身份。
输入格式输入将包含五行,每行代表一个嫌疑人的信息。
名字是一个字符串,长度不超过 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#includeusing 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;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧