最新华为OD机试真题-运输时间(200分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
👏 感谢大家的订阅➕ 和 喜欢💗
📎在线评测链接
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
⚡️ 运输时间
问题描述
A先生拥有一支由 辆车组成的车队,他需要将这些车开到
公里外的目的地。由于道路只有一条单行线,车辆无法超车。每辆车的出发时间相隔
小时,即第一辆车在
时刻出发,第二辆车在
时刻出发,以此类推。
不同车辆的行驶速度不同。如果一辆较快的车追上了前方的较慢车辆,它只能以前车的速度继续行驶。A先生想知道,最后一辆车到达目的地需要多长时间?
输入格式
第一行包含两个正整数 和
,分别表示车辆数量和目的地距离(单位:公里),用空格分隔。
接下来 行,每行包含一个正整数
,表示该车辆的行驶速度(单位:公里/小时)。
输出格式
输出一个实数,表示最后一辆车到达目的地所需的时间(单位:小时),保留一位小数。
样例输入 1
2 11
3
2
样例输出 1
5.5
数据范围
题解
我们可以模拟整个过程。对于每辆车,计算它到达目的地所需的时间 。如果这辆车是第一辆车,或者它的到达时间
大于前一辆车的到达时间加上
小时(即它没有被拖延),那么它的实际到达时间就是
。否则,它的实际到达时间就是前一辆车的到达时间加上
小时。最后一辆车的实际到达时间就是答案。
参考代码
- Python
m, n = map(int, input().split())
speeds = []
for _ in range(m):
speeds.append(int(input()))
res = 0
for i in range(m):
t = n / speeds[i]
if i == 0 or t >= res - 1:
res = t
else:
print(res)
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] w = new int[n];
for (int i = 0; i < n; i++) {
w[i] = sc.nextInt();
}
double res = 0;
for (int i = 0; i < n; i++) {
double t = (double) m / w[i];
if (i == 0 || t >= res - 1) {
res = t;
}
if(t < res - 1)
res -- ;
}
System.out.printf("%.1f", res);
}
}
- Cpp
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> w(n);
for (int i = 0; i < n; i++) {
cin >> w[i];
}
double res = 0;
for (int i = 0; i < n; i++) {
double t = (double) m / w[i];
if (i == 0 || t >= res - 1) {
res = t;
}
if(t < res - 1)
res -- ;
}
cout << res << "\n";
return 0;
}
#华为##华为OD##春招##秋招##笔试#最新华为OD机试-C&D卷 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测