A题 新版贪吃蛇(通过率24.79%)
题目描述:
解题思路:
读取输入
-
第一行输入一个整数
T
,表示测试用例的数量。 -
对于每个测试用例,第一行输入一个整数
n
,表示方格的边长。 -
第二行输入一个字符串,表示小蛇的操作指令串。
初始化变量
初始化 x
和 y
坐标,初始位置为 (0, 0)
,对应方格内的 0
号格子。
处理指令
遍历输入的所有指令,并根据指令更新 x
和 y
的值:
-
"UP":
y
坐标减1; -
"DOWN":
y
坐标加1; -
"LEFT":
x
坐标减1; -
"RIGHT":
x
坐标加1;
计算最终位置的编号
根据二维坐标 (x, y)
计算对应的编号,使用公式 n * y + x
来计算格子的编号。
输出结果
对于每个测试用例,输出计算得到的最终位置的编号。
代码实现:
# 使用int(input())获取一个整数,表示测试用例的数量。使用range函数创建一个迭代次数等于该数量的循环。
for _ in range(int(input())):
# 获取每个测试用例中移动指令的数量,并将其转换为整数。
n = int(input())
# 读取一行输入,并按照空格分割成列表lt。这行输入包含了移动指令序列。
lt = input().split()
# 初始化x和y坐标,它们都从0开始。
x, y = 0, 0
# 遍历列表lt中的每一个元素(移动指令)。
for i in lt:
# 如果指令是"UP",则y坐标减1。
if i == 'UP':
y -= 1
# 如果指令是"DOWN",则y坐标加1。
elif i == "DOWN":
y += 1
# 如果指令是"LEFT",则x坐标减1。
elif i == "LEFT":
x -= 1
# 否则,如果指令是"RIGHT",则x坐标加1。
else:
x += 1
# 根据最终位置计算结果,并打印出来。结果是n乘以y坐标加上x坐标。
print(n * y + x)
C题 小理吃甜食(通过率25.44%)
题目描述:
解题思路:
读取输入数据
-
读取两个整数
m
和n
。 -
创建一个列表
lts
来存储每一行的甜食糖分。 -
对于每一行数据,读取并转换为整数列表,然后对该列表进行降序排序。
计算每轮的最大糖分
-
对于每一轮游戏,找出当前轮次中每个同学可选甜食的最大糖分。
-
将每轮的最大糖分累加到变量
s
中。
输出结果
-
输出变量
s
,即小理在整个游戏中能吃到的甜食的最大总糖分。
代码实现 :
# 导入sys模块,用于访问命令行输入流。
import sys
# 将sys.stdin转换为迭代器,这样可以逐行读取输入。
data = iter(sys.stdin)
# 读取第一行输入,使用空格分隔,并转换为整数。
# m 表示同学的数量,n 表示游戏的轮数。
m, n = map(int, next(data).split())
# 初始化一个空列表lts来存储所有行的数据。
lts = []
# 初始化一个变量s用于累加每轮的最大糖分。
s = 0
# 对于每一行数据,执行以下操作:
for _ in range(m):
# 读取当前行的数据,按空格分割,并转换为整数。
# 使用sorted排序这一行的数字,排序规则是按降序排列。
# key=lambda x: -x 意味着对整数取负值来实现降序排序。
row = sorted(map(int, next(data).split()), key=lambda x: -x)
# 将排序后的行添加到列表lts中。
lts.append(row)
# 对于每一轮游戏(共n轮),执行以下操作:
for i in range(n):
# 初始化一个变量mx来记录当前轮次的最大糖分。
mx = 0
# 对于每一行(共m行),执行以下操作:
for j in range(m):
# 找出当前轮次第j行的甜食糖分,并与当前最大糖分比较,更新最大糖分。
mx = max(mx, lts[j][i])
# 将找到的当前轮次的最大糖分添加到总和s中。
s += mx
# 输出最终的总糖分s。
print(s)