一、题目描述
任务编排服务负责对任务进行组合调度。
参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。
任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。请编写一个方法,生成每次编排后的任务所有可能的总执行时长。
二、输入描述
第1行输入分别为第1种任务执行时长taskA,第2种任务执行时长taskB,这次要编排的任务个数num,以逗号分隔。
三、输出描述
数组形式返回所有总执行时时长,需要按从小到大排列。
四、补充说明
每种任务的数量都大于本次可以编排的任务数量:
0 < taskA
0 < taskB
0 <= num <= 100000
四、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);
}
五、效果展示
1、输入
1,2,3
2、输出
[3, 4, 5, 6]
3、说明
可以执行 3次 taskA,得到结果 3; 执行 2次 taskA和 1次 taskB,得到结果 4。
以此类推,得到最终结果。
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。