小学生蓝桥杯Python闯关 | 小Y的成绩
Posted COCOgsta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小学生蓝桥杯Python闯关 | 小Y的成绩相关的知识,希望对你有一定的参考价值。
学习Python从娃娃抓起!记录下蓝桥杯Python学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:小学生蓝桥杯Python闯关 | 汇总_COCOgsta的博客-CSDN博客
【题目描述】
小 Y 特别喜欢环湖赛跑,因为这样空气非常好,跑起来特别有动力。正值一年一度的环湖跑王者争霸赛开始了,小 Y 就立刻报名了。比赛主办方在周长为 8000 米的湖周围一圈设置了 n 个夺分点,逆时针编号为 1~n,每个夺分点的积分不一定相同,每个积分点的具体位置和积分数量由主办方在比赛开始前公布。比赛规定:参赛者可以选择从赛道的任意一点出发,只能逆时针跑,需要在 5 分钟内尽可能多拿分,只要到达积分点即可得到该积分点的积分,不同人到达同一积分点均能得到积分,互不影响。经过小 Y 自己赛前的反复测试发现,平均下来,自己比赛时的速度为 3.5 米每秒。
请问小 Y 以这个速度最多能拿多少分呢?最多能拿的分和最少能拿的分差多少呢?
【输入描述】
2n + 1 行,
第一行,一个整数 n,表示积分点的个数;
接下来 n 行,每行一个数,表示积分点的距离,这个距离是相对于 1 号积分点的距离。距离按照积分点的编号从 1 到 n 进行输入,由小到大,保证一圈的距离足够大,无法跑完一整圈;
再接下来的 n 行,每行一个数,表示每个积分点的积分,也是按照积分点的编号顺序进行输入,保证积分总和不超过 1000000000。
【输出描述】
两行,
第一行为小 Y 能得到的最多积分;
第二行为小 Y 能拿到最多积分与最少积分的差值。
【样例输入】
5
0
123
555
6111
7521
23
54
21
76
32
【样例输出】
130
109
【代码详解】
n = int(input())
ls = [int(input()) for i in range(n)]
ls.append(8000)
total = int(3.5 * 300)
point = 0
ls_sum = []
ls2 = []
# 计算两点之间的距离
for i in range(1, len(ls)):
dis = ls[i] - ls[i - 1]
ls2.append(dis)
ls2 = ls2 * 2 # 重复一遍列表,以免从任意位置开始后距离不足
# 生成距离对应的积分
ls_p = [int(input()) for i in range(n)]
ls_p1 = ls_p.pop(0)
ls_p.append(ls_p1)
ls_p = ls_p * 2 # 对应上面距离,将积分列表也重复一遍
dist = 0
for i in range(len(ls2) // 2):
if i == 0:
point = point + ls_p[-1]
else:
point = point + ls_p[i - 1]
for j in range(i, len(ls2)):
dist = dist + ls2[j]
if total < dist:
dist = 0
break
else:
point = point + ls_p[j]
ls_sum.append(point)
point = 0
# 按照从小到大顺序排列
ls_sum.sort()
print(max(ls_sum))
print(ls_sum[-1] - ls_sum[0])
复制代码
【运行结果】
5
0
123
555
6111
7521
23
54
21
76
32
130
109
以上是关于小学生蓝桥杯Python闯关 | 小Y的成绩的主要内容,如果未能解决你的问题,请参考以下文章