华为OD机试D卷-运输时间(200分) JAVA

解题思路:M辆车的发车时间不同,这个问题类似一个追及问题,但是,实际上是不能超车,也就是后边快车追到慢车后要用和慢车一样的速度去行驶。

代码思路如下:

  1. 首先读取车辆数量 M 和目的地距离 N,以及每辆车的速度存入数组 carspeeds
  2. 计算每辆车到达目的地所需的时间,存入数组 times。假设,所有的车都同一时刻出发。那么就只需要比较时间即可会不会追到。怎么假设同一时刻出发,就是在for计算的times数组赋值的时候加上index下标i,times[i] = i + n / carSpeed[i];
  3. 从第二辆车开始,依次检查每辆车的时间是否小于前一辆车的时间。如果是,说明该车会追上前车,将该车的时间更新为前车的时间。
  4. 最后输出最后一辆车到达目的地所需的时间,保留一位小数。
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);
    }
}

全部评论

相关推荐

身边的人都在收获,我却还在原地踏步,到底该怎么办啊!每次看到他们的好消息,我都想放弃,心里不停地问自己:到底该怎么才能找到一份工作呢?这种无力感让我想要彻底摆烂,真的很想知道,别人是怎么做到的。有没有人分享一下经历呢?我想学习一下啊走出这样的日子。
鼗:秋招其实是运气>实力的一场竞技游戏,除非实力很强(学历和技术)。大多数人都是半斤八两,看面试官和HR以及简历被曝光的概率罢了,有些时候你可能运气差一点或者说面试官不太友好也或者说你确实准备的不够好之类的,这些都是可能发生的事情。我觉得能做的事情是不比较、不气馁、在面试前多看一点面试的时间冷静一点自信一点,大大方方面试,给自己多一点时间去求职。我这样说不是站着说话不腰疼,我是想说你的offer还在路上,你也值得在这些困难之后得到你较为理想的offer,请你继续加油,保持乐观,积极打败你现在的困难
点赞 评论 收藏
分享
10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务