學習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