CCF CSP2018年九月前兩題實現(python,201809-1,201809-2)
阿新 • • 發佈:2018-12-17
第一題:
這道題還是很容易解決的,一些初學者或者粗心的人需要注意問題所提示的第一個和最後一個數在長度為n的數組裡面分別對應0和n-1。另外,就是CCF CSP要求的標準輸出,是要和樣例一樣的。
下面是本題的程式碼,如有更好的也歡迎給出程式碼。
#!usr/bin/python
# -*- coding:UTF-8 -*-
# 201809-1 賣菜 主要看此部分的關於陣列始末位置的判斷,另外還有結果的輸出
num = input()
list = input().split(" ")
n = int(num)
pri = []
res = []
for i in range(n):
pri. append(int(list[i]))
tmp = 0
for i in range(n):
if i == 0:
tmp = int((pri[i]+pri[i+1]) / 2)
res.append(tmp)
elif i == n-1:
tmp = int((pri[i] + pri[i - 1]) / 2)
res.append(tmp)
else:
tmp = int((pri[i-1]+pri[i+1]+pri[i])/3)
res.append(tmp)
print(" " .join(str(i) for i in res)) # 保證了輸出結果符合標準輸出
第二題
第二題參考了別人寫的C++程式碼才寫出來,好久不做這種題,真的是廢了,還是要多多刷題。
num = int(input())
a = []
a1 = [] #定義兩個陣列存放第一個人時間範圍的前者和後者
b = []
b1 = [] #定義兩個陣列存放第二個人時間範圍的前者和後者
tm = 0
for i in range(num):
list = input().split()
a.append(int(list[0]))
a1.append(int(list[1]))
for i in range(num, num * 2):
list1 = input().split()
b.append(int(list1[0]))
b1.append(int(list1[1]))
# 將問題輸入的資料分別存放到陣列
l = max(a1)
l1 = max(b1)
if l < l1:
tmp = l
else:
tmp = l1 # 找到兩個人最後一次運貨的最小時間,否則會報錯
x = 0
y = 0
for i in range(1,tmp):
h = 0
w = 0
if a[x] <= i and a1[x] > i:
h = 1
elif i >= a1[x]:
x += 1
if b[y] <= i and b1[y] > i:
w = 1
elif i >= b1[y]:
y += 1
if h == 1 and w == 1:
tm += 1
# 通過分析兩個人時間範圍內是否存在重疊,有的話算入總和,最後求出時間總和並輸出
print(tm)