返回目录

题目描述

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

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

题目解析

本题应该只是逻辑模拟题。逻辑比较简单,大家可以直接看代码。

本题主要是存在一些不明确的逻辑:

1、

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

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

我理解是保持不动。

2、

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

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

Python算法源码

def calculate_max_position(x, y, movements):
    pos = 0
    max_pos = 0

    for movement in movements:
        # 检查异常情况
        if movement < -100 or movement > 100:
            print("12345")
            return -1

        pos += movement

        # 如果数字等于幸运数,则调整位置
        if movement == y:
            if movement > 0:
                pos += 1
            elif movement < 0:
                pos -= 1

        # 比较当前位置和最大位置
        if pos > max_pos:
            max_pos = pos

    return max_pos

def main():
    n = int(input("输入移动次数:"))

    # 处理异常情况
    if n < 1 or n > 100:
        print("12345")
        return

    x = int(input("输入幸运数字:"))

    # 处理异常情况
    if x < -100 or x > 100:
        print("12345")
        return

    movements = []

    # 输入移动
    for i in range(n):
        movement = int(input("输入移动指令:"))

        # 处理异常情况
        if movement < -100 or movement > 100:
            print("12345")
            return

        movements.append(movement)

    # 计算最大位置
    max_pos = calculate_max_position(x, x, movements)

    print("最大位置:", max_pos)

if __name__ == "__main__":
    main()

C算法源码

#include <stdio.h>

// 计算最大位置
int calculateMaxPosition(int x, int y, int n, int movements[]) {
    int pos = 0;
    int maxPos = 0;

    for (int i = 0; i < n; i++) {
        // 检查异常情况
        if (movements[i] < -100 || movements[i] > 100) {
            printf("12345\n");
            return -1;
        }

        pos += movements[i];

        // 如果数字等于幸运数,则调整位置
        if (movements[i] == y) {
            if (movements[i] > 0) {
                pos += 1;
            } else if (movements[i] < 0) {
                pos -= 1;
            }
        }

        // 比较当前位置和最大位置
        if (pos > maxPos) {
            maxPos = pos;
        }
    }

    return maxPos;
}

int main() {
    int n, x;
    printf("输入移动次数:");
    scanf("%d", &n);

    // 处理异常情况
    if (n < 1 || n > 100) {
        printf("12345\n");
        return 0;
    }

    printf("输入幸运数字:");
    scanf("%d", &x);

    // 处理异常情况
    if (x < -100 || x > 100) {
        printf("12345\n");
        return 0;
    }

    int movements[n];

    // 输入移动
    for (int i = 0; i < n; i++) {
        printf("输入移动指令:");
        scanf("%d", &movements[i]);

        // 处理异常情况
        if (movements[i] < -100 || movements[i] > 100) {
            printf("12345\n");
            return 0;
        }
    }

    // 计算最大位置
    int maxPos = calculateMaxPosition(x, x, n, movements);

    printf("最大位置:%d\n", maxPos);

    return 0;
}

Java算法源码


import java.util.Scanner;

class MovementCalculator {
    private int x;
    private int y;

    MovementCalculator(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // 计算最大位置
    int calculateMaxPosition(int[] nums) {
        int pos = 0;
        int maxPos = 0;

        for (int num : nums) {
            // 检查异常情况
            if (num < -100 || num > 100) {
                System.out.println("12345");
                return -1;
            }

            pos += num;

            // 如果数字等于幸运数,则调整位置
            if (num == this.y) {
                if (num > 0) {
                    pos += 1;
                } else if (num < 0) {
                    pos -= 1;
                }
            }

            // 比较当前位置和最大位置
            maxPos = Math.max(maxPos, pos);
        }

        return maxPos;
    }
}

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

        System.out.print("输入移动次数:");
        int n = scanner.nextInt();

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

        System.out.print("输入幸运数字:");
        int x = scanner.nextInt();

        // 处理异常情况
        if (x < -100 || x > 100) {
            System.out.println("12345");
            return;
        }

        int pos = 0;
        int maxPos = 0;
        int[] movements = new int[n];

        // 输入移动
        for (int i = 0; i < n; i++) {
            System.out.print("输入移动指令:");
            int movement = scanner.nextInt();

            // 处理异常情况
            if (movement < -100 || movement > 100) {
                System.out.println("12345");
                return;
            }

            movements[i] = movement;
        }

        // 创建 MovementCalculator 实例
        MovementCalculator calculator = new MovementCalculator(x, x);

        // 计算最大位置
        maxPos = calculator.calculateMaxPosition(movements);

        System.out.println("最大位置:" + maxPos);
    }
}
最后修改:2024 年 03 月 31 日
如果觉得我的文章对你有用,请随意赞赏