华为OD机试 2024E卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
新型冠状病毒疫情的肆虐,使得大壮在武汉的大社区不得不再次考虑自己家和附近定点医院的具体情况。
经过一番调查,大壮明白了距离自己家最近的定点医院有两家。其中:
- 医院A和自己的距离是X公里
- 医院B和自己的距离是Y公里
由于武汉封城,公交停运,私家车不能上路,交通十分不便。现在:
- 到达医院A只能搭乘志愿者计程车,已知计程车的平均速度是M米/分钟,上车平均等待时间为L分钟。
- 到达医院B只能步行,平均速度是N米/分钟;
给出X,Y,M,L,N的数值,请问大壮到达哪家医院最快?
二、输入描述
一行,5个数。
分别是到达医院的距离,到达医院的距离,计程车平均速度,上车等待时间,步行速度。
三、输出描述
一行,计程车 (Taxi)、步行 (Walk)、相等 (Same)
四、测试用例
测试用例1:
1、输入
50 5 500 30 90
2、输出
Walk
3、说明
医院A:距离50公里 = 50000米
时间 = 30(等待) + 50000 / 500 = 30 + 100 = 130分钟
医院B:距离5公里 = 5000米
时间 = 5000 / 90 ≈ 55.56分钟
因为步行时间更短,输出 “Walk”。
测试用例2:
1、输入
10 10 1000 0 1000
2、输出
Same
3、说明
医院A:距离10公里 = 10000米
时间 = 0(等待) + 10000 / 1000 = 0 + 10 = 10分钟
医院B:距离10公里 = 10000米
时间 = 10000 / 1000 = 10分钟
两种方式时间相同,输出 “Same”。
五、解题思路
- 使用 Scanner 类读取标准输入的五个数值,分别代表到达医院A和B的距离(公里)、计程车的平均速度(米/分钟)、上车等待时间(分钟)以及步行的平均速度(米/分钟)。
- 将距离从公里转换为米,以便与速度单位(米/分钟)保持一致。
- 到达医院A的时间:包括上车等待时间 L 和乘坐计程车的行驶时间 distanceA / M。
- 到达医院B的时间:仅为步行的行驶时间 distanceB / N。
- 比较 timeTaxi 和 timeWalk,根据结果输出相应的字符串:
- 如果乘坐计程车更快,输出 “Taxi”。
- 如果步行更快,输出 “Walk”。
- 如果两者时间相同,输出 “Same”。
六、Python算法源码
# 导入sys模块以读取输入
import sys
def main():
# 读取输入的所有内容并按空格分割
input = sys.stdin.read().split()
# 从输入中提取X, Y, M, L, N
X = float(input[0]) # 到达医院A的距离(公里)
Y = float(input[1]) # 到达医院B的距离(公里)
M = float(input[2]) # 计程车平均速度(米/分钟)
L = float(input[3]) # 上车等待时间(分钟)
N = float(input[4]) # 步行平均速度(米/分钟)
# 将距离从公里转换为米
distanceA = X * 1000 # 医院A的距离(米)
distanceB = Y * 1000 # 医院B的距离(米)
# 计算到达医院A的总时间:等待时间 + 乘坐计程车的时间
timeTaxi = L + (distanceA / M)
# 计算到达医院B的总时间:步行的时间
timeWalk = distanceB / N
# 比较两种方式的总时间,输出结果
if timeTaxi < timeWalk:
print("Taxi")
elif timeWalk < timeTaxi:
print("Walk")
else:
print("Same")
if __name__ == "__main__":
main()
七、JavaScript算法源码
// 使用readline模块读取输入
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = []; // 存储所有输入内容
rl.on('line', (line) => {
input = input.concat(line.trim().split(/\s+/).map(Number));
}).on('close', () => {
// 从输入中提取X, Y, M, L, N
let X = input[0]; // 到达医院A的距离(公里)
let Y = input[1]; // 到达医院B的距离(公里)
let M = input[2]; // 计程车平均速度(米/分钟)
let L = input[3]; // 上车等待时间(分钟)
let N = input[4]; // 步行平均速度(米/分钟)
// 将距离从公里转换为米
let distanceA = X * 1000; // 医院A的距离(米)
let distanceB = Y * 1000; // 医院B的距离(米)
// 计算到达医院A的总时间:等待时间 + 乘坐计程车的时间
let timeTaxi = L + (distanceA / M);
// 计算到达医院B的总时间:步行的时间
let timeWalk = distanceB / N;
// 比较两种方式的总时间,输出结果
if (timeTaxi < timeWalk) {
console.log("Taxi");
} else if (timeWalk < timeTaxi) {
console.log("Walk");
} else {
console.log("Same");
}
});
八、C算法源码
#include <stdio.h>
int main(){
double X, Y, M, L, N;
// 读取输入的五个数:X, Y, M, L, N
scanf("%lf %lf %lf %lf %lf", &X, &Y, &M, &L, &N);
// 将距离从公里转换为米
double distanceA = X * 1000; // 医院A的距离(米)
double distanceB = Y * 1000; // 医院B的距离(米)
// 计算到达医院A的总时间:等待时间 + 乘坐计程车的时间
double timeTaxi = L + (distanceA / M);
// 计算到达医院B的总时间:步行的时间
double timeWalk = distanceB / N;
// 比较两种方式的总时间,输出结果
if (timeTaxi < timeWalk) {
printf("Taxi\n");
}
else if (timeWalk < timeTaxi) {
printf("Walk\n");
}
else {
printf("Same\n");
}
return 0;
}
九、C++算法源码
#include <iostream>
using namespace std;
int main(){
double X, Y, M, L, N;
// 读取输入的五个数:X, Y, M, L, N
cin >> X >> Y >> M >> L >> N;
// 将距离从公里转换为米
double distanceA = X * 1000; // 医院A的距离(米)
double distanceB = Y * 1000; // 医院B的距离(米)
// 计算到达医院A的总时间:等待时间 + 乘坐计程车的时间
double timeTaxi = L + (distanceA / M);
// 计算到达医院B的总时间:步行的时间
double timeWalk = distanceB / N;
// 比较两种方式的总时间,输出结果
if (timeTaxi < timeWalk) {
cout << "Taxi\n";
}
else if (timeWalk < timeTaxi) {
cout << "Walk\n";
}
else {
cout << "Same\n";
}
return 0;
}
🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)
🏆本文收录于,华为OD机试真题(Python/JS/C/C++)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。