华为OD机试 - 小明的幸运数(Java 2024 E卷 100分)

在这里插入图片描述

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

专栏导读

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小明在玩一个游戏,游戏规则 如下:在游戏开始前,小明站在坐标轴原点处(坐标值为0)。

给定一组指令和一个幸运数,每个指令包含一个整数,小明按照指令前进指定步数或者后退指定步数。前进代表朝坐标轴Q的正方向走,后退代表朝坐标轴的负方向走。

幸运数为一个整数,如果某个指令为正好和幸运数相等,则小明行进步数+1。

例如:

幸运数为3,指令为[2,3,0,-5]

指令为2,表示前进2步;

指令为3,正好和幸运数相等,前进3+1=4步;

指令为0,表示原地不动,既不前进,也不后退;

指令为-5,表示后退5步。

请你计算小明在整个游戏过程中过,小明所处的最大坐标值。

二、输入描述

第一行输入1个数字n,代表指令的总个数 n(1 <= n <= 100)

第二行输入1个数字m,代表幸运数m(-100 <= m <= 100)

第三行输入n个数字,每个指令的值范围为:-100 <= 指令值 <= 100

三、输出描述

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

四、测试用例

测试用例1:

1、输入

2
1
-5 1

2、输出

0

3、说明

总共2个指令,幸运数为1,按照指令行进,依次如下:

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

测试用例2:

1、输入

5
-5
5 1 6 0 -7

2、输出

12

3、说明

指令 5,前进5步,坐标变为 5。
指令 1,前进1步,坐标变为 6。
指令 6,前进6步,坐标变为 12。
指令 0,不变。
指令 -7,后退7步,坐标变为 5。

最大坐标值是 12。

五、解题思路

  1. 小明一开始在坐标轴的原点,即位置为 0。
  2. 设置一个变量 maxCoordinate 用于记录小明在整个游戏过程中到达的最大坐标值。
  3. 对每个指令进行遍历,并根据指令值更新小明的当前位置:
    • 如果指令值为正数,则小明向坐标轴的正方向前进相应步数。
    • 如果指令值为负数,则小明向坐标轴的负方向后退相应步数。
    • 如果指令值为0,小明的位置保持不变。
    • 如果指令值等于幸运数 m,则增加额外的一步,对于正数指令,多前进一步。对于负数指令,多后退一步。
  4. 每次更新位置后,将当前位置与 maxCoordinate 进行比较,若当前位置大于 maxCoordinate,则更新 maxCoordinate。
  5. 在遍历完所有指令后,输出记录的最大坐标值。
  6. 如果输入数据不符合预期或者发生异常,可以设定一个特殊值(如 12345)来表示异常情况。

六、Java算法源码

public class OdTest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try {
            int n = scanner.nextInt(); // 指令的总个数
            int m = scanner.nextInt(); // 幸运数

            int maxCoordinate = 0; // 记录最大坐标值
            int currentPosition = 0; // 当前坐标值

            for (int i = 0; i < n; i++) {
                int instruction = scanner.nextInt();

                if (instruction == m) {
                    currentPosition += (instruction > 0) ? instruction + 1 : instruction - 1;
                } else {
                    currentPosition += instruction;
                }

                // 更新最大坐标值
                if (currentPosition > maxCoordinate) {
                    maxCoordinate = currentPosition;
                }
            }

            System.out.println(maxCoordinate);
        } catch (Exception e) {
            // 异常情况输出12345
            System.out.println("12345");
        } finally {
            scanner.close();
        }
    }
}

七、效果展示

1、输入

5
0
1 0 0 0 -1

2、输出

1

3、说明

初始状态:小明在坐标轴原点,当前位置为 0。
指令1:1(前进1步),当前位置变为 1。
指令2:0(与幸运数相同,不移动),当前位置仍为 1。
指令3:0(与幸运数相同,不移动),当前位置仍为 1。
指令4:0(与幸运数相同,不移动),当前位置仍为 1。
指令5:-1(后退1步),当前位置变为 0。
最大坐标值:1(在执行第一条指令时达到)。

在这里插入图片描述


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

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
小明华为研究院新招收的一位实习生,他被配到了OD部门进行机试。为了在华为展现自己的能力,小明决定加倍努力完成这次任务。 首先,小明非常清楚机试的重要性,因此他在机试前进行了充的准备。他仔细研究了OD部门的相关技术和项目,深入了解了华为的技术实践和创新理念,以便能够更好地理解并面对题目。 其次,小明知道找到一个适合自己的位置是提升自己表现的重要因素之一。在机试时,他紧紧抓住机会,迅速找到了一个靠窗的位置。这个位置有利于他集中注意力,减少噪音干扰,提高工作效率。 在机试过程中,小明全身心地投入到任务中。他认真阅读每个题目,析需求,并结合自己的理解进行解答。虽然有些题目复杂,但他不慌不忙,调整心态,用深入的思考和析找出最佳解决方案。 此外,小明还注重与身边的同事沟通和合作。机试期间,小明积极与同桌的小红交流,并互相提供意见和帮助。这种团队合作精神不仅让小明更好地理解题目,也使他们共同进步。 最后,小明机试后结合自身表现进行了总结和反思。他意识到自己在解答一个特定问题时可能存在的问题,并提出了相应的解决方案。他将这个经验放在实践中,并承诺在未来的工作中继续不断提升自己的能力。 总之,小明通过充准备,找到合适的位置,全身心地投入和合作,并进行总结和反思,充展示了自己的能力和潜力。这次机试不仅让小明更加了解了华为,也为他未来成长和发展奠定了良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值