荣耀软件开发工程师-嵌入式笔试 9-11
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《嵌入式软件笔试-2023年真题汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
第一题
某项目组组织举办"明日之星"评选活动,投票采用无记名方式,投票后整理出投票清单,最后根据投票和评选规则选出一名“明日之星"。
评选规则:
1)票数最多者当选
2)票数相同的,根据员工姓名排序,字母序号越小排前面,a > b > c,A>B>C;如果姓名之间有包含关系,短的姓名排在长姓名的前面,Tom > Tomy。
输入描述
输入为投票清单,用字符串表示,投票姓名之间用英文逗号隔开,中间不带空格,例如:Tom,Lily,Tom,Lucy,Lucy,Jack
输入要求:
1)员工名字只包含大小写字母,首字母大写,其他字母小写
2)总票数n: 0<n<100
输出描述
1)非法输入直接返回:error.0001
2)输入合法,返回当选“明日之星"员工的名字
示例1
输入
Tom,Lily,Tom,Lucy,Lucy,Jack
输出
Lucy
说明
Tom和Lucy投票数相同,Lucy排序优于Tom
示例2
输入
Tom,Lily,Tom,Lucy,Lucy,Tom,Jack
输出
Tom
说明
Tom得票数最多
#include <iostream> #include <sstream> #include <map> #include <vector> #include <algorithm> using namespace std; // 判断姓名是否合法 bool isValidName(const string& name) { if (name.empty()) return false; if (!isupper(name[0])) return false; // 首字母必须大写 for (int i = 1; i < name.size(); ++i) { if (!islower(name[i])) return false; // 其他字母必须小写 } return true; } string findStarOfTomorrow(const string& votes) { stringstream ss(votes); string name; map<string, int> voteCounts; // 分割字符串并计票 while (getline(ss, name, ',')) { if (!isValidName(name)) return "error.0001"; voteCounts[name]++; } // 查找票数最高且字典序最小的名字 pair<string, int> result("", 0); for (const auto& entry : voteCounts) { if (entry.second > result.second || (entry.second == result.second && entry.first < result.first)) { result = entry; } } return result.first; } int main() { string input; getline(cin, input); string result = findStarOfTomorrow(input); if (result == "error.0001") { cout << result << endl; } else { cout << result << endl; } return 0; }
第二题
输入2个序列,第一个序列为复数的实部,第二个序列为复数的虚部,计算复数的绝对值,并按照绝对值从大到小排序,并打印出来(保留整数部分打印出来即可)
输入描述
第一个序列为复数的实部,起始和结束用中括号,参见示例格式。
第二个序列为复数的虚部,起始和结束用中括号,参见示例格式。
输出描述
按照绝对值从大到小排序并打印出来,两个绝对值中间加空格
示例1
输入
[5041 5761 4691 672 5172 -9735 -9907 -4906 2880 9222]
[3740 3871 3171 1886 163 19
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。