返回目录
题目描述
小明在玩一个游戏,游戏规则如下:
在游戏开始前,小明站在坐标轴原点处(坐标值为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);
}
}
5 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]真题目录序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指针☆☆☆☆13掌[...]