华为OD机试 - 最大坐标值(Java 2024 D卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题++点这里++

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小明在玩一个游戏,游戏规则如下:在游戏开始前,小明站在坐标轴原点处(坐标值为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

2、输出

0

3、说明

总共 2 个指令,幸运数为 1 ,依照指令行进,依次如下游戏开始前,站在坐标轴原点,此时坐标值为 0;

指令为 −5 ,后退5 步 ,此时坐标值为−5 ;

指令为 1,正好等于幸运数,前进 1+1=2步,此时坐标值为 −3;

整个游戏过程中,小明所处的坐标值依次为[0,−5,−3],最大坐标值为 0。

四、解题思路

1、输入读取与基本验证:

  1. 首先读取指令的总数 n,验证其是否在合法范围 (1 ≤ n ≤ 100)。如果不在此范围,输出 "12345" 并结束程序。
  2. 然后读取幸运数 m,并验证其是否在合法范围 (−100 ≤ m ≤ 100)。如果不合法,同样输出 "12345" 并结束程序。

2、初始化坐标和最大坐标:

  1. 初始化小明当前的坐标 pos 为 0。
  2. 初始化游戏过程中小明所达到的最大坐标 maxPos 为 0。

3、处理每个指令:

  1. 遍历读取每个指令 num 并验证指令是否在合法范围内 (−100 ≤ num ≤ 100)。若不合法,输出 "12345" 并结束程序。
  2. 根据指令更新小明的当前坐标。如果指令等于幸运数,且指令非零,根据指令的正负增减 1。
  3. 更新小明所达到的最大坐标 maxPos。

4、输出结果:

输出小明在游戏过程中达到的最大坐标值 maxPos。

五、Java算法源码

java 复制代码
public class OdTest02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();  // 读取指令的总数

        if (n < 1 || n > 100) {
            System.out.println("12345");
            return;
        }

        int m = sc.nextInt();  // 读取幸运数

        if (m < -100 || m > 100) {
            System.out.println("12345");
            return;
        }

        int idx = 0;  // 小明的起始坐标
        int max = 0;  // 记录过程中的最大坐标

        for (int i = 0; i < n; i++) {
            int num = sc.nextInt();  // 读取每个指令

            if (num < -100 || num > 100) {
                System.out.println("12345");
                return;
            }

            idx += num;  // 更新小明的位置

            if (num == m) {  // 检查是否是幸运数,是的话根据正负调整
                if (num > 0) {
                    idx += 1;
                } else if (num < 0) {
                    idx -= 1;
                }
            }

            max = Math.max(max, idx);  // 更新最大坐标
        }

        System.out.println(max);  // 输出最大坐标值
    }
}

六、效果展示

1、输入

5

-5

-5 1 6 0 -7

2、输出

1

3、说明

总共 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。

🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关推荐
叫我阿呆就好了2 分钟前
C 语言复习总结记录四
c语言
2401_853275736 分钟前
Java IO 基础知识总结下
java·开发语言
时光の尘6 分钟前
C语言菜鸟入门·关键字·union的用法
运维·服务器·c语言·开发语言·c·printf
我想睡到自然醒₍˄·͈༝·͈˄*₎◞ ̑11 分钟前
【Android】View的解析—滑动篇
android·java
诸神黄昏EX13 分钟前
Android 常用命令和工具解析之内存相关
android·java·开发语言
dreamsever22 分钟前
Glide源码学习
android·java·学习·glide
武昌库里写JAVA23 分钟前
SpringBoot+SpringCloud面试题整理附答案
java·开发语言·算法·spring·log4j
呼啦啦啦啦啦啦啦啦27 分钟前
每日刷题(有效括号序列,滑动窗口最大值,最小的K个数,寻找第K大)
java·前端·javascript
手握风云-29 分钟前
数据结构(Java版)第五期:ArrayList与顺序表(下)
java·数据结构·算法
蜗牛沐雨29 分钟前
Go语言中的sync.Pool详解:高效对象复用
java·jvm·golang