最大坐标值 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++
题目描述
小明在玩一个游戏,游戏规则如下:在游戏开始前,小明站在坐标轴原点处(坐标值为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 ,既不前进也不后退,此时坐标值为 1 ;
指令为 −7,后退 7步,此时坐标值为 −6。
整个游戏过程中,小明所处的坐标值依次为 [0,−6,−5,1,1,−6],最大坐标值为 1。
题解
这道题属于模拟题,根据题目描述,小明根据一系列指令在坐标轴上移动,其中某个指令和幸运数相等时,小明的移动步数要加1。题目要求计算小明整个游戏过程中所处的最大坐标值。
解题思路:
- 读取输入,包括指令总个数
n
、幸运数m
以及n个指令的值。- 根据题目要求,将幸运数映射成对应的指令值(lucky)。如果幸运数为正,映射为
m+1
;如果幸运数为负,映射为m-1
。- 使用变量
x
记录小明在坐标轴上的位置,使用变量max_x
记录整个游戏过程中的最大坐标值。- 遍历每个指令,如果当前指令值等于幸运数,将其替换为映射后的值,然后更新小明的位置
x
,并比较更新最大坐标值max_x
。- 输出最大坐标值
max_x
。在实现中,使用循环遍历每个指令,更新小明的坐标位置,并保持最大坐标值。最后输出最大坐标值即可。
注意在模拟的过程中要检验输入数据的有效性。
Java
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int lucky = (m >= 0) ? m + 1 : m - 1; // 幸运数对应的指令
boolean normal = true;
if (!validate
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。