(C卷,100分)- 小明的幸运数(Java & JS & Python & 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

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const n = parseInt(await readline());

  if (n < 1 || n > 100) {
    // 异常情况下输出:12345
    console.log("12345");
    return;
  }

  const m = parseInt(await readline());

  if (m < -100 || m > 100) {
    // 异常情况下输出:12345
    console.log("12345");
    return;
  }

  let pos = 0;
  let maxPos = 0;

  const nums = (await readline()).split(" ").map(Number);

  for (let num of nums) {
    if (num < -100 || num > 100) {
      // 异常情况下输出:12345
      console.log("12345");
      return;
    }

    pos += num;

    if (num == m) {
      // 如果某个指令正好和幸运数相等,则小明行进步数+1
      // 注意,如果幸运数字为0,且存在指令为0,那么此时我理解小明应该继续保持不动
      if (num > 0) {
        pos += 1;
      } else if (num < 0) {
        pos -= 1;
      }
    }

    // 比较本次移动后的坐标位置和最大坐标位置
    maxPos = Math.max(maxPos, pos);
  }

  console.log(maxPos);
})();

 

Java算法源码

import java.util.Scanner;

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

    int n = sc.nextInt();

    if (n < 1 || n > 100) {
      // 异常情况下输出:12345
      System.out.println("12345");
      return;
    }

    int m = sc.nextInt();

    if (m < -100 || m > 100) {
      // 异常情况下输出:12345
      System.out.println("12345");
      return;
    }

    int pos = 0;
    int maxPos = 0;

    for (int i = 0; i < n; i++) {
      int num = sc.nextInt();

      if (num < -100 || num > 100) {
        // 异常情况下输出:12345
        System.out.println("12345");
        return;
      }

      pos += num;

      if (num == m) {
        // 如果某个指令正好和幸运数相等,则小明行进步数+1
        // 注意,如果幸运数字为0,且存在指令为0,那么此时我理解小明应该继续保持不动
        if (num > 0) {
          pos += 1;
        } else if (num < 0) {
          pos -= 1;
        }
      }

      // 比较本次移动后的坐标位置和最大坐标位置
      maxPos = Math.max(maxPos, pos);
    }

    System.out.println(maxPos);
  }
}

 

Python算法源码

def getResult():
    n = int(input())

    # 异常情况下输出:12345
    if n < 1 or n > 100:
        print("12345")
        return

    m = int(input())

    # 异常情况下输出:12345
    if m < -100 or m > 100:
        print("12345")
        return

    pos = 0
    maxPos = 0

    nums = list(map(int, input().split()))

    for num in nums:
        # 异常情况下输出:12345
        if num < -100 or num > 100:
            print("12345")
            return

        pos += num

        # 如果某个指令正好和幸运数相等,则小明行进步数+1
        # 注意,如果幸运数字为0,且存在指令为0,那么此时我理解小明应该继续保持不动
        if num == m:
            if num > 0:
                pos += 1
            elif num < 0:
                pos -= 1

        # 比较本次移动后的坐标位置和最大坐标位置
        maxPos = max(maxPos, pos)

    print(maxPos)


getResult()

C算法源码

#include <stdio.h>

#define MAX(a,b) ((a) > (b) ? (a) : (b))

int main() {
    int n;
    scanf("%d", &n);

    if (n < 1 || n > 100) {
        // 异常情况下输出:12345
        puts("12345");
        return 0;
    }

    int m;
    scanf("%d", &m);
    if (m < -100 || m > 100) {
        // 异常情况下输出:12345
        puts("12345");
        return 0;
    }

    int pos = 0;
    int maxPos = 0;

    for (int i = 0; i < n; i++) {
        int num;
        scanf("%d", &num);

        if(num < -100 || num > 100) {
            // 异常情况下输出:12345
            puts("12345");
            return 0;
        }

        pos += num;

        if(num == m) {
            // 如果某个指令正好和幸运数相等,则小明行进步数+1
            // 注意,如果幸运数字为0,且存在指令为0,那么此时我理解小明应该继续保持不动
            if(num > 0) {
                pos += 1;
            } else if(num < 0) {
                pos -= 1;
            }
        }

        // 比较本次移动后的坐标位置和最大坐标位置
        maxPos = MAX(maxPos, pos);
    }

    printf("%dn", maxPos);

    return 0;
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?