小學生藍橋杯Python闖關 | 小Y的成績

熱愛編程的通信人 發佈 2024-04-25T20:07:01.091720+00:00

學習Python從娃娃抓起!記錄下藍橋杯Python學習和備考過程中的題目,記錄每一個瞬間。附上匯總貼:小學生藍橋杯Python闖關 | 匯總_COCOgsta的博客-CSDN博客【題目描述】小 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
關鍵字: