华为OD机试(C卷+D卷)2024真题目录(Java & c++ & python)
题目描述
小明在玩一个游戏,游戏规则如下:在游戏开始前,小明站在坐标轴原点处(坐标值为0).
给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指令前进指定步数或者后退指定步数。前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走。
幸运数为一个整数,如果某个指令正好和幸运数相等,则小明行进步数+1。
例如:
幸运数为3,指令为[2,3,0,-5]
指令为2,表示前进2步;
指令为3,正好和幸运数相等,前进3+1=4步;
指令为0,表示原地不动,既不前进,也不后退。
指令为-5,表示后退5步。
请你计算小明在整个游戏过程中,小明所处的最大坐标值。
输入描述
第一行输入1个数字,代表指令的总个数 n(1 ≤ n ≤ 100)
第二行输入1个数字,代表幸运数m(-100 ≤ m ≤ 100)
第三行输入n个指令,每个指令的取值范围为:-100 ≤ 指令值 ≤ 100
输出描述
输出在整个游戏过程中,小明所处的最大坐标值。异常情况下输出:12345
示例1
输入
2
1
-5 1
输出
0
说明
总共2个指令,幸运数为1,按照指令行进,依次如下游戏开始前,站在坐标轴原点,此时坐标值为0;
指令为-5,后退5步,此时坐标值为-5;
指令为1,正好等于幸运数,前进1+1=2步,此时坐标值为-3;
整个游戏过程中,小明所处的坐标值依次为[0, -5, -3],最大坐标值为0。
示例2
输入
5
-5
-5 1 6 0 -7
输出
1
说明
总共5个指令,幸运数为-5,依照指令行进,依次如下:
游戏开始前,站在坐标轴原点,此时坐标值为0,
指令为-5,正好等于幸运数,后退5+1=6步,此时坐标值为-6;
指令为1,前进1步,此时坐标值为-5;
指令为6,前进6步,此时坐标值为1;
解题思路
模拟
- 初始化:
- 定义当前坐标为0。
- 定义最大坐标值为0。
- 遍历指令:
- 对于每个指令,根据其值决定是前进还是后退。
- 如果指令等于幸运数,则行进步数+1。
- 更新当前坐标,并比较更新最大坐标值。
- 输出结果:
- 最后输出整个游戏过程中小明所处的最大坐标值。
- 如果遇到异常情况,输出12345。
参考代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> commands(n);
for (int i = 0; i < n; ++i) {
cin >> commands[i];
}
int current_position = 0;
int max_position = 0;
for (int i = 0; i < n; ++i) {
int command = commands[i];
if (command == m) {
if (command > 0) {
current_position += (command + 1);
} else if (command < 0) {
current_position += (command - 1);
}
} else {
current_position += command;
}
if (current_position > max_position) {
max_position = current_position;
}
}
cout << max_position << endl;
return 0;
}