✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
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
,即为按从小到大排列的所有总执行时