【华为OD机考真题】- 小明能到达的最大坐标值(C&D卷)(Java)

本文收录于「2025华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅题库正在疯狂收录中,up!up!up!!
提醒:拒绝一切代考/替考,违法必究!本人所写题库均搜集于互联网。
  
订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用!

1. 题目描述

具体题目描述如下:

小明在玩一个游戏,游戏规则如下;在游戏开始前,小明站在坐标轴原点处(坐标值为 0)给定一组指令和一个幸运数,每个指令都是个整数,小明按照指定的要求前进或者后退指定的步数。
前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走,幸运数为一个整数,如果某个指令正好和幸运数相等,则小明行进步数加1
例如:
幸运数为 3 ,指令内[2,3,0,-5]
指令为2,表示前进2步
指令为3,正好好和幸运数相等,前进3+1=4步
指令为0,表示原地不动,既不前进,也不后退
指令为 -5 ,表示后退5 步。
请你计算小明在整个游戏过程中,小明所处的最大坐标值。

本文目录:

    • 1. 题目描述
    • 2. 输入描述
    • ️3. 输出描述
    • 4. 示例演示
      • ✨4.1 示例1
      • ✨4.2 示例2
      • ✨4.3 示例3
    • 5. 解题分析
      • 5.1 问题理解
      • 5.2 解题思路
      • 5.3 问题考点
      • 5.4 解题步骤
    • 6. 解题Coding
      • ✅6.1 代码实现
      • ⏱6.2 时间&空间复杂度
      • ⛓‍6.3 代码解析
      • 6.4 小结
    • 7. 测试用例
      • 7.1 测试用例1
        • ️7.1.1 输入
        • ️7.1.2 输出
        • ️7.1.3 实际运行结果展示
      • 7.2 测试用例2
        • ️7.2.1 输入
        • ️7.2.2 输出
        • ️7.2.3 实际运行结果展示
      • 7.3 测试用例3
        • ️7.3.1 输入
        • ️7.3.2 输出
        • ️7.3.3 实际运行结果展示
    • 8. 附录源码
    • 福利赠与你
      • 安利其他语言版本题解册
    • ‍Who am I?

温馨提醒: 大家在参加华为OD机试时,切记不要仅仅死记硬背题解代码。真正的通过率取决于你对代码的理解能力。建议你在理解基本原理和逻辑的基础上,模仿并自己编写代码,这样才能更有效地应对机试。

2. 输入描述

第一行输入1个数字,代表指令的总个数 n (1 ≤n≤ 100)
第二行输入1 个数字,代表幸运数 m (-100 ≤ m ≤ 100)
第三行输入几个指令,每个指令值的取值范围为:-100≤ 指令值≤ 100

️3. 输出描述

输出在整个游戏过程中,小明所处的最大坐标值。异常Q 情况下输出:12345。

4. 示例演示

✨4.1 示例1

输入:

2
1
-5 1

输出:

0

示例说明:

总共2个指令,幸运数为1,依照指令行进,依次如下游戏开始前,站在坐标轴原点,此时坐标值为0。
指令为 -5,后退5步 ,此时坐标值为-5;指令为1,正好等于幸运数,前进1+1=2步,此时坐标值为 -3。
整个游戏过程中,小明所处的坐标值依次为[0,-5,-3],最大坐标值为0。

✨4.2 示例2

输入:

5
-5
-5 1 6 0 -7

输出:

1

示例说明:

✨4.3 示例3

输入:

5
-5
-5 1 6 0 -7

输出:

1

示例说明:

5. 解题分析

5.1 问题理解

本题的核心任务是模拟一个小明在二维坐标系中沿着指定方向移动的过程。每次给定一个方向的指令,移动一定的步数,最后需要输出小明到达的最大坐标位置。题目要求通过模拟小明的移动来得到最终的坐标。

输入中包括指令的数量和每个指令代表的步数,移动过程中,若遇到 0 步,则忽略当前指令,移动过程中最大的位置值就是我们要求的结果。

5.2 解题思路

  1. 初始化位置:小明的起始位置是坐标系的原点(0)。
  2. 逐个处理指令:依次处理每个指令,如果指令为 0,跳过。否则,判断指令是否是正数还是负数,决定小明是向前移动还是向后移动。
  3. 计算最大坐标:每次处理完一条指令后,更新当前坐标,记录下最大的坐标值。
  4. 输出最大坐标值:最后输出最大坐标位置。

5.3 问题考点

  • 模拟题:如何处理一系列操作,逐步得到结果。
  • 数组操作:如何存储和访问每个指令。
  • 条件判断:判断步数的正负来决定前进或后退。

5.4 解题步骤

  1. 读取输入数据:获取指令数量 n 和每个指令的步数数组 nums
  2. 初始化变量:设置 cur_pos 为当前位置,ans 用于记录最大位置。
  3. 逐条处理指令:遍历每条指令,更新 cur_pos 并计算当前坐标,判断并更新最大坐标值 ans
  4. 输出结果:最终输出最大坐标值。

6. 解题Coding

根据如上题解思路,进行代码实战,大家请看如下,建议不要死记硬背代码,要理解其题型及实现思路,别担心,代码我都会给出超详细注释,你一定能看明白的。

✅6.1 代码实现

package com.demo.java.OD401_450.OD427;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @des: 【小明能到达的最大坐标值(C&D卷)】问题
 * @url: https://blog.csdn.net/weixin_43970743/article/details/146263177
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner scanner = new Scanner(System.in);

            // 读取指令数量n和每个指令的步数m
            int n = scanner.nextInt();
            int m = scanner.nextInt();

            // 创建一个数组,存储每条指令的步数
            int[] nums = new int[n];
            for (int i = 0; i < n; i++) {
                nums[i] = scanner.nextInt(); // 读取每条指令的步数
            }

            int cur_pos = 0, ans = 0; // 初始化当前位置和最大坐标
            for (int num : nums) {
                if (num == 0) {
                    continue; // 如果指令为0,则跳过
                }
                if (num == m) {
                    // 如果当前步数和给定的m相同,进行特殊处理
                    cur_pos += (num > 0) ? 1 : -1; // 根据步数的正负决定前进还是后退
                }
                cur_pos += num; // 更新当前位置
                ans = Math.max(ans, cur_pos); // 更新最大坐标
            }
            System.out.println(ans); // 输出最大坐标
        } catch (Exception e) {
            System.out.println(12345); // 异常处理,输出12345
        }
    }
}

⏱6.2 时间&空间复杂度

  • 时间复杂度O(n),其中 n 是输入的指令数量。我们对每个指令进行一次处理,时间复杂度是线性的。
  • 空间复杂度O(n),用于存储每个指令的步数数组。

⛓‍6.3 代码解析

  1. 读取输入:使用 Scanner 读取输入,首先获取 nm,然后存储每条指令的步数到数组 nums 中。
  2. 初始化cur_pos 用来记录当前位置,ans 用来记录最大坐标。
  3. 处理指令:遍历每条指令:
    • 如果指令为 0,跳过当前指令。
    • 否则,判断步数 num 是否等于给定的 m,若相等,则特殊处理。
    • 更新 cur_pos(当前位置)并计算当前坐标。
    • 更新 ans,记录下当前位置的最大值。
  4. 异常处理:如果有异常发生(如输入不符合要求),输出 12345

6.4 小结

本题考察了如何通过模拟一系列指令,更新并记录当前的位置。我们通过遍历每条指令,适时更新当前位置,并在每次更新后记录最大坐标值。通过有效的条件判断,能够实现题目所要求的逻辑。在实际应用中,这类模拟题对于处理动态变化的状态问题非常有用,帮助我们更好地理解如何在程序中进行状态更新。

7. 测试用例

7.1 测试用例1

️7.1.1 输入
2
1
-5 1
️7.1.2 输出
0
️7.1.3 实际运行结果展示

根据本地代码进行方法测试,本地运行结果展示如下:

【华为OD机考真题】- 小明能到达的最大坐标值(C&D卷)(Java)_第1张图片

7.2 测试用例2

️7.2.1 输入
5
-5
-5 1 6 0 -7
️7.2.2 输出
1
️7.2.3 实际运行结果展示

根据本地代码进行方法测试,本地运行结果展示如下:

【华为OD机考真题】- 小明能到达的最大坐标值(C&D卷)(Java)_第2张图片

7.3 测试用例3

️7.3.1 输入

️7.3.2 输出

️7.3.3 实际运行结果展示

根据本地代码进行方法测试,本地运行结果展示如下:

8. 附录源码

  针对如上分享OD机试真题之外,这里我还开源全部OD机试原真题源码,供同学们一对一学习!对照每题都有题目号及详细代码注释。Gitee,例如题序号为1,则题解代码对应文件夹OD1,题序号为5,则题解代码对应文件夹OD5,以此类推,目的就是为了方便大家学习,一举上岸!(这里的题序号指专栏导航贴中表格一列的序号)

福利赠与你

  如果你还想学习更多相关OD真题题解,都建议直接毫不犹豫地学习此专栏「2024华为OD机试真题(全栈版)」,快速掌握Java、Python、C++、JavaScript等多种热门语言详细解题,快速突破华为OD机试,实现高分目标。还将提供线上多端答疑交流,解决你的所有问题!

安利其他语言版本题解册

  • 【华为OD机试】2025年真题汇总A+B+C+D+E卷【Python实现】
  • 【华为OD机试】2025年真题汇总A+B+C+D+E卷【Java实现】
  • 【华为OD机试】2025年真题汇总A+B+C+D+E卷【C++实现】
  • 【华为OD机试】2025年真题汇总A+B+C+D+E卷【JavaScript实现】

注意: 上述任意专栏一次订阅,获永久免费阅读权限,后续更新都能学习。
提示: 拒绝一切形式的代考,替考行为,务必诚信考试!!!本人所写题库均搜集于互联网。

‍Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主&最具价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

你可能感兴趣的:(华为od,c语言,java,华为OD机考真题,华为OD,小明能到达的最大坐标值)