最新华为OD机试真题-运输时间(200分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
👏 感谢大家的订阅➕ 和 喜欢💗
📎在线评测链接
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
⚡️ 运输时间
问题描述
A先生拥有一支由 辆车组成的车队,他需要将这些车开到 公里外的目的地。由于道路只有一条单行线,车辆无法超车。每辆车的出发时间相隔 小时,即第一辆车在 时刻出发,第二辆车在 时刻出发,以此类推。
不同车辆的行驶速度不同。如果一辆较快的车追上了前方的较慢车辆,它只能以前车的速度继续行驶。A先生想知道,最后一辆车到达目的地需要多长时间?
输入格式
第一行包含两个正整数 和 ,分别表示车辆数量和目的地距离(单位:公里),用空格分隔。
接下来 行,每行包含一个正整数 ,表示该车辆的行驶速度(单位:公里/小时)。
输出格式
输出一个实数,表示最后一辆车到达目的地所需的时间(单位:小时),保留一位小数。
样例输入 1
2 11
3
2
样例输出 1
5.5
数据范围
题解
由于后续车辆不能超过前面的车辆,因此后续车辆的实际速度可能会被前面的车辆限制。我们需要计算最后一辆车到达终点的时间。
我们逐车计算其达到目的地所需的时间,然后模拟这种追赶行为:如果一辆车追不上前面的车,则它的到达时间会被前车的时间限制。最终输出最后一辆车的到达时间即可。
- Python
# 读取 M 和 N
m, n = map(int, input().split())
# 初始化最大花费时间 ans 为 0
ans = 0
# 创建列表 w 用于存储每辆车的速度
w = []
# 读取列表 w 的值,即每辆车的速度
for _ in range(m):
w.append(int(input()))
# 遍历列表计算最大花费时间 ans
for i in range(m):
# 计算按照当前速度行驶到达终点所需要的时间
t = n / w[i]
# 如果是第一辆车,或者追不上前面一辆车,更新最大花费时间 ans
if i == 0 or t >= ans - 1:
ans = t
else:
# 如果追上了前面一辆车,更新最大花费时间 ans 为当前时间减一
ans = ans - 1
# 输出结果,保留一位小数
print(f"{ans:.1f}")
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
最新华为OD机试-E+D卷 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测