华为软件类笔试-嵌入式软件开发 8-30
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《软件开发笔试汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
第三题内存分配
系统由n个任务组成,任务运行有依赖关系,前序任务执行完毕才可以启动后续任务。任务在启动前申请内存,执行完毕后释放,内存释放后可用于其他任务使用。每个任务的运行时间相等。请计算系统所有任务执行所需要的最小内存。
解答要求
时间限制: C/C++1000ms其他语言: 2000ms内存限制C/C++256MB其他语言:512MB
输入
第1行为1个正整数n,表示任务个数,n<20
第2行为n个正整数,表示每个任务所需要的内存大小,0<内存<1000
第3行为n个取值为0或1的数,表示任务0对其他任务的依赖关系,0表示不依赖,1表示依赖
...
第3+n行为n个取值为0或1的数,表示任务n-1对其他任务的依赖关系,0表示不依赖,1表示依赖
输出
输出系统任务执行所需要的最小内存
样例1
输入
9 50 50 80 40 40 40 60 60 60 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0
输出
120
#include <iostream> #include <vector> #include <unordered_map> #include <queue> using namespace std; int main() { int n; cin >> n; vector<int> mem(n); for (int i = 0; i < n; i++) { cin >> mem[i]; } unordered_map<int, vector<int>> graph; vector<int> indegree(n, 0); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int tmp; cin >> tmp; if (tmp == 1) { graph[j].push_back(i); indegree[i]++; } } } queue<int> q; for (int i = 0; i < n; i++) { if (indegree[i] == 0) { q.push(i); } } int res = 0; while (!q.empty()) { int size = q.size(); int cur = 0; for (int i = 0; i < size; i++) { int node = q.front(); q.pop(); cur += mem[node]; for (int next : graph[node]) { indegree[next]--; if (indegree[next] == 0) { q.push(next); } } } res = max(res, cur); } cout << res << endl; return 0; }
第一题智慧打卡系统
某家高科技公司为方便员工省去每日上下班的打卡操作,计划推广使用智慧打卡系统。其运行的原理是系统会记录员工当日进出门禁的时间(员工在上班期间可能会多次进出门禁,格式为24小时制,小时:分钟,“HH:MM”)
现在请编写一个算法,计算员工当日的工作时长(单位:分钟),具体要求如下:
1、单次离岗15min以内,不从工作时长中扣除。
2、12:00至14:00为午休时间,不算工作时长。
3、18:00至19:30为晚饭时间,不算工作明长。
解答要求
时间限制:C/C++1000ms其他语言:2000ms内存限制:C/C++256MB其他语言:512MB
输入
第一行:员工当天进门禁的次数n。
第二行:员工当天进门禁的所有时间,以空格分隔。
第三行:员工当天出门禁的次数m。
第四行:员工当天出门禁的所有时间,以空格分隔。
注:0<n,m<100,不存在相同的出入门禁时间,也不存在连续的出门禁或入门禁的情况。
输出
当日的工作时长。
样例1
输入
5 07:50 08:50 12:30 13:40 19:50 5 08:45 12:20 13:20 18:30 20:30
输出
530
解释:
员工的工作时段为07:50-12:00,14:00~18:00,19:50~20:30,工作时长为530分钟
样例2
输入
4 08:30 12:30 14:00 18:20
4 12:00 13:00 16:50 19:00
输出
380
解释员工的工作时段为08:30~12:00,14:00~16:50,工作时长为380分钟
#include <iostream> #include <vector> #include <string> #include <sstream> #include <algorithm> using namespace std; int main() { int n, m; cin >> n; vector<int> intime(n), outtime(n); string time_str; int hour, minute; for(int i = 0; i < n; i++) { cin >> time_str; sscanf(time_str.c_str(), "%d:%d", &hour, &
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。