本文收录于「2025华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!!
提醒:拒绝一切代考/替考,违法必究!本人所写题库均搜集于互联网。
订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用!
具体题目描述如下:
小明在玩一个游戏,游戏规则如下;在游戏开始前,小明站在坐标轴原点处(坐标值为 0)给定一组指令和一个幸运数,每个指令都是个整数,小明按照指定的要求前进或者后退指定的步数。
前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走,幸运数为一个整数,如果某个指令正好和幸运数相等,则小明行进步数加1
例如:
幸运数为 3 ,指令内[2,3,0,-5]
指令为2,表示前进2步
指令为3,正好好和幸运数相等,前进3+1=4步
指令为0,表示原地不动,既不前进,也不后退
指令为 -5 ,表示后退5 步。
请你计算小明在整个游戏过程中,小明所处的最大坐标值。
温馨提醒: 大家在参加华为OD机试时,切记不要仅仅死记硬背题解代码。真正的通过率取决于你对代码的理解能力。建议你在理解基本原理和逻辑的基础上,模仿并自己编写代码,这样才能更有效地应对机试。
第一行输入1个数字,代表指令的总个数 n (1 ≤n≤ 100)
第二行输入1 个数字,代表幸运数 m (-100 ≤ m ≤ 100)
第三行输入几个指令,每个指令值的取值范围为:-100≤ 指令值≤ 100
输出在整个游戏过程中,小明所处的最大坐标值。异常Q 情况下输出:12345。
输入:
2
1
-5 1
输出:
0
示例说明:
总共2个指令,幸运数为1,依照指令行进,依次如下游戏开始前,站在坐标轴原点,此时坐标值为0。
指令为 -5,后退5步 ,此时坐标值为-5;指令为1,正好等于幸运数,前进1+1=2步,此时坐标值为 -3。
整个游戏过程中,小明所处的坐标值依次为[0,-5,-3],最大坐标值为0。
输入:
5
-5
-5 1 6 0 -7
输出:
1
示例说明:
输入:
5
-5
-5 1 6 0 -7
输出:
1
示例说明:
本题的核心任务是模拟一个小明在二维坐标系中沿着指定方向移动的过程。每次给定一个方向的指令,移动一定的步数,最后需要输出小明到达的最大坐标位置。题目要求通过模拟小明的移动来得到最终的坐标。
输入中包括指令的数量和每个指令代表的步数,移动过程中,若遇到 0
步,则忽略当前指令,移动过程中最大的位置值就是我们要求的结果。
0
)。0
,跳过。否则,判断指令是否是正数还是负数,决定小明是向前移动还是向后移动。n
和每个指令的步数数组 nums
。cur_pos
为当前位置,ans
用于记录最大位置。cur_pos
并计算当前坐标,判断并更新最大坐标值 ans
。根据如上题解思路,进行代码实战,大家请看如下,建议不要死记硬背代码,要理解其题型及实现思路,别担心,代码我都会给出超详细注释,你一定能看明白的。
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
}
}
}
O(n)
,其中 n
是输入的指令数量。我们对每个指令进行一次处理,时间复杂度是线性的。O(n)
,用于存储每个指令的步数数组。Scanner
读取输入,首先获取 n
和 m
,然后存储每条指令的步数到数组 nums
中。cur_pos
用来记录当前位置,ans
用来记录最大坐标。0
,跳过当前指令。num
是否等于给定的 m
,若相等,则特殊处理。cur_pos
(当前位置)并计算当前坐标。ans
,记录下当前位置的最大值。12345
。本题考察了如何通过模拟一系列指令,更新并记录当前的位置。我们通过遍历每条指令,适时更新当前位置,并在每次更新后记录最大坐标值。通过有效的条件判断,能够实现题目所要求的逻辑。在实际应用中,这类模拟题对于处理动态变化的状态问题非常有用,帮助我们更好地理解如何在程序中进行状态更新。
2
1
-5 1
0
根据本地代码进行方法测试,本地运行结果展示如下:
5
-5
-5 1 6 0 -7
1
根据本地代码进行方法测试,本地运行结果展示如下:
根据本地代码进行方法测试,本地运行结果展示如下:
针对如上分享OD机试真题之外,这里我还开源全部OD机试原真题源码,供同学们一对一学习!对照每题都有题目号及详细代码注释。Gitee,例如题序号为1,则题解代码对应文件夹OD1,题序号为5,则题解代码对应文件夹OD5,以此类推,目的就是为了方便大家学习,一举上岸!(这里的题序号指专栏导航贴中表格一列的序号)
如果你还想学习更多相关OD真题题解,都建议直接毫不犹豫地学习此专栏「2024华为OD机试真题(全栈版)」,快速掌握Java、Python、C++、JavaScript等多种热门语言详细解题,快速突破华为OD机试,实现高分目标。还将提供线上多端答疑交流,解决你的所有问题!
注意: 上述任意专栏一次订阅,获永久免费阅读权限,后续更新都能学习。
提示: 拒绝一切形式的代考,替考行为,务必诚信考试!!!本人所写题库均搜集于互联网。
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主&最具价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。
-End-