目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 1、输入
- 2、输出
- 3、说明
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
M辆车需要在一条不能超车的单行道到达终点,起点到终点的距离为N。
速度快的车追上前车后,只能以前车的速度继续行驶,求最后一辆到达目的地的车的花费时间。
注意:
每辆车固定间隔1小时出发,比如第一辆车0时出发,第二辆车1时出发,以此类推。
二、输入描述
第一行输入两个数字M、N,分别表示M辆车和跑道的距离N。
接下来的M行表示每辆车的行驶速度。
三、输出描述
最后一辆车到达目的地花费的时间。
1、输入
2
2、输出
11
3、说明
5.5
四、解题思路
- M辆车,跑到N米;
- 每辆车间隔1小时出发;
- 求最后一辆车到目的地需要花费的时间。
- 如果当前车比前车更早到达,则被前车阻碍,按前车到达时间计算
- 如果当前车比前车更晚到达,则按后车到达时间计算
- 简而言之,谁用的时间越长,就算谁的
- 路上的时间 = 到达时刻 - 出发时刻
五、Java算法源码
public class Test01 {
/**
* M辆车,跑到N米
* 每辆车间隔1小时出发
* 求最后一辆车到目的地需要花费的时间
* 第一行输入M、N
* 第二行开始每行一个数字S,代表M台车的速度
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
double max = 0;
/**
* 如果当前车比前车更早到达,则被前车阻碍,按前车到达时间计算
* 如果当前车比前车更晚到达,则按后车到达时间计算
*
* 简而言之,谁用的时间越长,就算谁的
*/
for (int i = 0; i < M; i++) {
// 从最开始发车到到达终点,当前车一共用的时间
double time = N / sc.nextDouble() + i;
max = Math.max(max,time);
}
// 路上的时间 = 到达时刻 - 出发时刻
double consume = max - (M - 1);
System.out.println(consume);
}
}
六、效果展示
1、输入
2 11
3
2
2、输出
5.5
3、说明
🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。