华为OD机试真题 Python 实现【任务总执行时长】【2023Q1 100分】-LMLPHP

一、题目描述

任务编排服务负责对任务进行组合调度。

参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。

任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。请编写一个方法,生成每次编排后的任务所有可能的总执行时长。

二、输入描述

第1行输入分别为第1种任务执行时长taskA,第2种任务执行时长taskB,这次要编排的任务个数num,以逗号分隔。

三、输出描述

数组形式返回所有总执行时时长,需要按从小到大排列。

四、补充说明

每种任务的数量都大于本次可以编排的任务数量:

0 < taskA
0 < taskB
0 <= num <= 100000

五、解题思路

  1. 首先读取输入的任务执行时长 taskA、taskB 和要编排的任务个数 num;
  2. 使用逗号分隔输入的任务执行时长,将其存储在数组 split 中;
  3. 将任务执行时长转换为整数类型,并分别赋值给变量 taskA、taskB 和 num;
  4. 使用 TreeSet 来存储所有可能的总执行时长,以便自动按从小到大的顺序排序;
  5. 使用循环从 0 到 num,依次计算每种任务数量的组合情况,并计算总执行时长:
    • 假设任务 A 的数量为 i,则任务 B 的数量为 num - i;
    • 总执行时长为 taskA * i + taskB * (num - i);
    • 将总执行时长添加到 set 中;
  6. 输出 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 实现【任务总执行时长】【2023Q1 100分】-LMLPHP


🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 Python 实现【任务总执行时长】【2023Q1 100分】-LMLPHP

07-05 04:19