最大坐标值 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

小明在玩一个游戏,游戏规则如下:在游戏开始前,小明站在坐标轴原点处(坐标值为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。题目要求计算小明整个游戏过程中所处的最大坐标值。

解题思路:

  1. 读取输入,包括指令总个数 n、幸运数 m以及n个指令的值。
  2. 根据题目要求,将幸运数映射成对应的指令值(lucky)。如果幸运数为正,映射为 m+1;如果幸运数为负,映射为 m-1
  3. 使用变量 x 记录小明在坐标轴上的位置,使用变量 max_x 记录整个游戏过程中的最大坐标值。
  4. 遍历每个指令,如果当前指令值等于幸运数,将其替换为映射后的值,然后更新小明的位置 x,并比较更新最大坐标值 max_x
  5. 输出最大坐标值 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%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。

全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务