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

作者 : admin 本文共1944个字,预计阅读时间需要5分钟 发布时间: 2024-06-10 共3人阅读

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

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

专栏导读

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天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算法源码

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 D卷 100分)插图(1)

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

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

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

华为OD机试 – 最大坐标值(Java 2024 D卷 100分)插图(2)

本站无任何商业行为
个人在线分享 » 华为OD机试 – 最大坐标值(Java 2024 D卷 100分)
E-->