> 文章列表 > 【华为OD机试真题 C++】1076 - 任务总执行时长 | 机试题+算法思路+考点+代码解析

【华为OD机试真题 C++】1076 - 任务总执行时长 | 机试题+算法思路+考点+代码解析

【华为OD机试真题 C++】1076 - 任务总执行时长 | 机试题+算法思路+考点+代码解析

文章目录

    • 一、题目
      • 🔸题目描述
      • 🔸输入输出
      • 🔸样例1
    • 二、代码参考
  • 作者:KJ.JK

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:华为OD机试真题(C++)


一、题目


🔸题目描述

任务编排服务负责对任务进行组合调度。
 
参与编排的任务有两种类型,其中一种执行时长为taskA,,另一种执行时长为taskB。
 
任务一旦开始执行不能被打断,且任务可连续执行。
 
服务每次可以编排num个任务。
请编写一个方法,生成每次编排后的任务所有可能的总执行时长。


🔸输入输出

输入
第1行输入分别为第1种任务执行时长taskA,
 
第2种任务执行时长taskB,这次要编排的任务个数num,以逗号分隔。
 
注:每种任务的数量都大于本次可以编排的任务数量
● 0< taskA
● 0< taskB
● 0 <= num <= 100000
 
输出
数组形式返回所有总执行时时长,需要按从小到大排列。


🔸样例1

输入
1,23输出
[3,4,5,6]说明:
可以执行3次taskA,得到结果3;执行2次taskA和1次taskB,得打结果4,以此类推,得到最终的结果

二、代码参考

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <set>using namespace std;int main() {// 处理输入string line;getline(cin, line); // 读取一行输入vector<int> taskTimes;size_t pos = 0;while ((pos = line.find(",")) != string::npos) { // 判断是否还有逗号分隔的元素taskTimes.push_back(stoi(line.substr(0, pos))); // 将逗号前的子串转为整数并添加到 vector 中line.erase(0, pos + 1); // 删除已经处理过的子串和逗号}taskTimes.push_back(stoi(line)); // 处理最后一个元素int taskATime = taskTimes[0]; // 获取任务 A 的处理时间int taskBTime = taskTimes[1]; // 获取任务 B 的处理时间int num = taskTimes[2]; // 获取总任务数// 用 set 存储结果,自动排序且去重set<int> totalTimes; // 创建 set 对象,用于存储结果for (int i = 0; i <= num; i++) { // 遍历所有可能的情况int res = taskATime * (num - i) + i * taskBTime; // 计算总耗时totalTimes.insert(res); // 将计算结果添加到 set 中}// 输出结果for (auto time : totalTimes) { // 遍历 set 中的所有元素cout << time << " "; // 输出元素值和空格}cout << endl; // 输出换行符return 0;
}

作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习