华为OD机试C卷(100分)-小明的幸运数(C语言)

题目描述

小明在玩一个游戏,游戏规则如下:

在游戏开始前,小明站在坐标轴原点处(坐标值为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

用例

输入 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,依照指令行进,依次如下:
游戏开始前,站在坐标轴原点,此时坐标值为0,
指令为-5,正好等于幸运数,后退5+1=6步,此时坐标值为-6;
指令为1,前进1步,此时坐标值为-5;
指令为6,前进6步,此时坐标值为1;
指令为0,既不前进,也不后退,此时坐标值为1;
指令为-7,后退7步,此时坐标值为-6。
整个游戏过程中,小明所处的坐标值依次为:
[0, -6, -5, 1, 1, -6],最大坐标值为1。

题目解析
本题应该只是逻辑模拟题。逻辑比较简单,大家可以直接看代码。
本题主要是存在一些不明确的逻辑:

1、

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

如果幸运数是0,且存在指令为0的情况,那么此时小明是行进步数是+1,还是-1,还是保持不动?

我理解是保持不动。

2、

输出描述中说:异常情况下输出:12345

本题应该没有啥异常情况,但是输入里面给了给个入参的范围限制,因此我做了对输入参数范围的校验,如果不满足,则输出异常码:12345

#include <stdio.h>
#include <stdlib.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
int main()
{
     int n,m;
     int maxpos=0;
     int pos=0;
     scanf("%d",&n);
     scanf("%d",&m);
     for(int i=0;i<n;i++){
          int num;
          scanf("%d",&num);
          pos+=num;
          if(num==m){
               if(num>0){
                    pos+=1;
               }else if(num<0){
                    pos-=1;
               }
          }
     maxpos=MAX(maxpos,pos);
     }
    printf("%d",maxpos);
    return 0;
}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我不会起名字呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值