华为OD机试D卷-运输时间(200分) JAVA
解题思路:M辆车的发车时间不同,这个问题类似一个追及问题,但是,实际上是不能超车,也就是后边快车追到慢车后要用和慢车一样的速度去行驶。
代码思路如下:
- 首先读取车辆数量
M和目的地距离N,以及每辆车的速度存入数组carspeeds。 - 计算每辆车到达目的地所需的时间,存入数组
times。假设,所有的车都同一时刻出发。那么就只需要比较时间即可会不会追到。怎么假设同一时刻出发,就是在for计算的times数组赋值的时候加上index下标i,times[i] = i + n / carSpeed[i]; - 从第二辆车开始,依次检查每辆车的时间是否小于前一辆车的时间。如果是,说明该车会追上前车,将该车的时间更新为前车的时间。
- 最后输出最后一辆车到达目的地所需的时间,保留一位小数。
import java.util.Scanner;
public class OJTest6 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int M = in.nextInt();
int N = in.nextInt();
int[] carSpeed = new int[M];
for (int i = 0; i < carSpeed.length; i++) {
carSpeed[i] = in.nextInt();
}
System.out.println(translateTime(carSpeed, N));
}
private static double translateTime(int[] carSpeed, double n) {
double[] times = new double[carSpeed.length];
for (int i = 0; i < times.length; i++) {
times[i] = i + n / carSpeed[i];
}
for (int i = 1; i < times.length; i++) {
if (times[i] < times[i - 1]) {
times[i] = times[i - 1];
}
}
return times[times.length - 1] - (times.length - 1);
}
}