目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、补充说明
- 五、解题思路
- 六、Python算法源码
- 七、效果展示
- 1、输入
- 2、输出
- 3、说明
一、题目描述
任务编排服务负责对任务进行组合调度。
参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。
任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。请编写一个方法,生成每次编排后的任务所有可能的总执行时长。
二、输入描述
第1行输入分别为第1种任务执行时长taskA,第2种任务执行时长taskB,这次要编排的任务个数num,以逗号分隔。
三、输出描述
数组形式返回所有总执行时时长,需要按从小到大排列。
四、补充说明
每种任务的数量都大于本次可以编排的任务数量:
0 < taskA
0 < taskB
0 <= num <= 100000
五、解题思路
- 首先读取输入的任务执行时长 taskA、taskB 和要编排的任务个数 num;
- 使用逗号分隔输入的任务执行时长,将其存储在数组 split 中;
- 将任务执行时长转换为整数类型,并分别赋值给变量 taskA、taskB 和 num;
- 使用 TreeSet 来存储所有可能的总执行时长,以便自动按从小到大的顺序排序;
- 使用循环从 0 到 num,依次计算每种任务数量的组合情况,并计算总执行时长:
- 假设任务 A 的数量为 i,则任务 B 的数量为 num - i;
- 总执行时长为 taskA * i + taskB * (num - i);
- 将总执行时长添加到 set 中;
- 输出 set,即为按从小到大排列的所有总执行时;
六、Python算法源码
import sys
line = sys.stdin.readline().strip()
ta, tb, num = map(int, line.split(","))
if num == 0:
ans = []
elif ta == tb:
ans = [num * ta]
else:
if ta > tb:
ta, tb = tb, ta
ans = [ta * num]
minus = tb - ta
for i in range(num):
ans.append(ans[-1] + minus)
print(ans)
七、效果展示
1、输入
1,2,3
2、输出
[3, 4, 5, 6]
3、说明
可以执行 3次 taskA,得到结果 3; 执行 2次 taskA和 1次 taskB,得到结果 4。
以此类推,得到最终结果。
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。