
✅创作者:陈书予
 🎉个人主页:陈书予的个人主页
 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
 🌟专栏地址: Java华为OD机试真题(2022&2023) 
文章目录
1. 题目描述
任务编排服务负责对任务进行组合调度。
参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。
任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。请编写一个方法,生成每次编排后的任务所有可能的总执行时长。
2. 输入描述
第1行输入分别为第1种任务执行时长taskA,第2种任务执行时长taskB,这次要编排的任务个数num,以逗号分隔。
3. 输出描述
数组形式返回所有总执行时时长,需要按从小到大排列。
补充说明:
 每种任务的数量都大于本次可以编排的任务数量:
0 < taskA
 0 < taskB
 0 <= num <= 100000
4. Java算法源码
/**
 * 任务总执行时长
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String line = sc.nextLine();
    String[] split = line.split(",");
    int taskA = Integer.parseInt(split[0]);
    int taskB = Integer.parseInt(split[1]);
    int num = Integer.parseInt(split[2]);
    Set<Integer> set = new TreeSet<>();
    for (int i = 0; i <= num; i++) {
        int val = taskA * i + taskB * (num - i);
        set.add(val);
    }
    System.out.println(set);
}
 
5. 测试

6.解题思路

- 首先读取输入的任务执行时长 
taskA、taskB和要编排的任务个数num。 - 使用逗号分隔输入的任务执行时长,将其存储在数组 
split中。 - 将任务执行时长转换为整数类型,并分别赋值给变量 
taskA、taskB和num。 - 使用 
TreeSet来存储所有可能的总执行时长,以便自动按从小到大的顺序排序。 - 使用循环从 0 到 num,依次计算每种任务数量的组合情况,并计算总执行时长: 
  
- 假设任务 A 的数量为 
i,则任务 B 的数量为num - i。 - 总执行时长为 
taskA * i + taskB * (num - i)。 - 将总执行时长添加到 
set中。 
 - 假设任务 A 的数量为 
 - 输出 
set,即为按从小到大排列的所有总执行时 











