【华为OD机试真题】423、项目排期 、最快完成所有工作的天数 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)


订阅本专栏后即可解锁在线OJ刷题权限
 
🍂个人博客首页: KJ.JK
 
🍂专栏介绍: 2024年最新的华为OD机试真题B、C和D卷,使用C++、Java、Python语言进行解答,每个题目的思路分析都非常详细,支持在线OJ评测刷题!!!!订阅后获取权限,新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析,持续更新,欢迎订阅学习,有代码问题随时解答


一、题目


🎃题目描述

项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成, 不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行工作安排,使整个项目能用最少的时间交付


🎃输入输出

输入
第一行输入为M个需求的工作量,单位为天, 用逗号隔开。
例如: X1,X2 ,X3… Xm
表示共有M个需求,每个需求的工作量分别为X1天,X2天…

### 华为 C++ 真题及答案解析 #### 考勤信息题目描述 在一个公司里,员工每天上下班都需要打卡记录考勤情况。现在给定一段时间内的所有打卡记录,请统计每位员工在这段时间内迟到、早退和缺勤的情况。 具体来说: - 迟到定义为上班打卡时间晚于规定上班时间。 - 早退定义为下班打卡时间早于规定下班时间。 - 缺勤定义为当天没有任何打卡记录。 输入数据包含多组测用例,每组测用例的第一行为三个整数N, M, K分别表示总天数、规定的上班时间和规定的下班时间;接下来N行,每一行先给出一个字符串S代表员工姓名,再跟两个整数A,B,其中A=-1表示该员工这天未上班打卡,B=-1表示该员工这天未下班打卡,其他情况下这两个数值则分别为实际的上班和下班时刻。 输出对于每个测案例的结果应按照如下格式打印:依次列出所有不同名字的员工以及他们对应的迟到了多少次、早退了多少次还有缺席了多少整天[^1]。 ```cpp #include <iostream> #include <map> #include <vector> using namespace std; struct Record { string name; int arriveTime; int leaveTime; }; void processAttendance(vector<Record>& records, const map<string, pair<int, int>>& workHours) { map<string, vector<int>> stats; // {name -> [lateCount, earlyLeaveCount, absentCount]} for (const auto& record : records) { if (!stats.count(record.name)) { stats[record.name] = {0, 0, 0}; } bool isAbsent = false; if (record.arriveTime == -1 || record.leaveTime == -1) { ++(stats[record.name][2]); isAbsent = true; } else { if (record.arriveTime > workHours.at(record.name).first && !isAbsent) { ++(stats[record.name][0]); } if (record.leaveTime < workHours.at(record.name).second && !isAbsent) { ++(stats[record.name][1]); } } } for (auto &[name, stat] : stats) { cout << "Employee Name: " << name << ", Late Count: " << stat[0] << ", Early Leave Count: " << stat[1] << ", Absent Days: " << stat[2] << endl; } } int main() { int N, M, K; cin >> N >> M >> K; vector<Record> attendanceRecords(N); map<string, pair<int, int>> standardWorkTimes; while (cin >> N >> M >> K) { for (int i = 0; i < N; ++i) { cin >> attendanceRecords[i].name >> attendanceRecords[i].arriveTime >> attendanceRecords[i].leaveTime; if (!standardWorkTimes.contains(attendanceRecords[i].name)) standardWorkTimes.insert({attendanceRecords[i].name, make_pair(M, K)}); } processAttendance(attendanceRecords, standardWorkTimes); } } ``` 此代码实现了对考勤系统的模拟处理,并能够计算出每一位员工的具体违规次数。需要注意的是,在真实环境中应当考虑更多边界条件和其他可能影响结果的因素[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KJ.JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值