# ☄️CSF程速勁賽 決賽題庫 ###### tags: `CSF` ## 202107 CSF程速勁賽 決賽 1-繪製圖形 **1. 設計說明: 請撰寫一程式輸入繪製模式、圖形個數,以 * 號繪製出對應圖形,每一列最右邊的 * 號不能有空白出現,如下所示:** (圖中的黃點代表空格)![](https://i.imgur.com/BAnlUUq.png) ![](https://i.imgur.com/i2BzbXr.png) ```python= m=int(input()) n=int(input()) for i in range(n*2): if i%2==m: print(' *\n * *\n* *\n* *') else : print('* *\n* *\n * *\n *') ``` ## 202107 CSF程速勁賽 決賽 2-最少月台數 1. 設計說明: 請撰寫一程式輸入火車到某一站的抵達與離開時間,計算並輸出不讓到站火車延遲的最少月台數。以範例輸入1為例: 輸入值為 1.2,1.5,1.5,2.3 2.3,2.8,2.5,2.5 代表共有4列火車,其抵達與離開某一站的時間如下表所示: 火車 a b c d 抵達時間 1.2 1.5 1.5 2.3 離開時間 2.3 2.8 2.5 2.5 則需要最少月台數為3,其中 火車 時間 抵達/離開 月台 a 1.2 抵達 1 b 1.5 抵達 2 c 1.5 抵達 3 a 2.3 離開 1 d 2.3 抵達 1 c 2.5 離開 3 d 2.5 離開 1 b 2.8 離開 2 註:火車a的離開時間與火車d的抵達時間一樣,可共用一個月台 ![](https://i.imgur.com/le5XB3e.png) ```python= t_in=str(input()) arrive=[eval(i) for i in t_in.split(',')] t_out=str(input()) leave=[eval(i) for i in t_out.split(',')] time=[] for i in range(len(arrive)): time.append((arrive[i],1)) time.append((leave[i],0)) time.sort() m=0 c=0 for _,i in time: if i : c+=1 m=max(m,c) else : c-=1 print(m) ``` ```python= from xmlrpc.client import MININT inArr=input().split(",") outArr=input().split(",") for i in range(len(inArr)): inArr[i]=eval(inArr[i]) for i in range(len(outArr)): outArr[i]=eval(outArr[i]) # print(inArr) # print(outArr) for i in range(len(inArr)): for j in range(i,len(inArr)): if inArr[i]>inArr[j]: tmp=inArr[i] inArr[i]=inArr[j] inArr[j]=tmp tmp=outArr[i] outArr[i]=outArr[j] outArr[j]=tmp # print(inArr) # print(outArr) arr=[] for i in range(len(inArr)): if len(arr)==0: arr.append([inArr[i],outArr[i]]) continue minLen=999999 minIn=0 minOut=0 minIndex=0 tmp=0 for j in range(len(arr)): if inArr[i]>=arr[j][1] and outArr[i]>=arr[j][1]: tmp+=1 if inArr[i]-arr[j][1]<minLen: minLen=inArr[i]-arr[j][1] minIn=inArr[i] minOut=outArr[i] minIndex=j if tmp==0: arr.append([inArr[i],outArr[i]]) else: arr[minIndex][1]=outArr[i] # print(arr) print(len(arr)) ``` ```python= # t_in=str(input()) # arrive=[eval(i) for i in t_in.split(',')] # t_out=str(input()) # leave=[eval(i) for i in t_out.split(',')] # arrive.sort() # leave.sort() # ans=0 # m=0 # seq = (i/10 for i in range(0, 240)) # for i in seq: # if i in arrive : # ans+=1 # m=max(ans,m,arrive.count(i)) # if i in leave : # ans-=1 # print(m) ``` ## 202107 CSF程速勁賽 決賽 3-最大滿意人數 1. 設計說明: 系統要幫民眾安排施打疫苗的時段,會先排定預設時段(0, 1, 2, ...)進行施打,但民眾可依自己想施打的的滿意時段進行變更,方式如下: 預設時段:依順序安排(0, 1, 2, ...),每個時段只有一人。 變更方式: 每人都有一個滿意時段。 時段只能變更一次。 除非能換到自己滿意的時段,否則不願意變更。 請撰寫一程式,依序輸入每一位民眾的滿意時段,計算並輸出有幾位民眾可以在自己的滿意時段施打疫苗。以範例輸入1為例: 輸入值為 2,2,0,5,3,5,7,4 ![](https://i.imgur.com/JbGfCwd.png) ![](https://i.imgur.com/P4IRKNS.png) ```python= def f(lst,ch_t=None): if ch_t is None : #初始化 ch_t=set(range(len(lst))) if len(ch_t)==1: return ch_t like=set(lst[x] for x in ch_t) #取出 remove_set=ch_t-like #沒人滿意的時段 if remove_set: ch_t-=remove_set #以沒人滿意排除不能變更的人 f(lst,ch_t) return ch_t n=input() a=[eval(i) for i in n.split(',')] peo=f(a) print(len(peo)) ``` ## 202112 CSF程速勁賽 決賽 1-小黑與他的便當店戀情 **小黑暗戀巷口便當店的女店員。** **為了能跟可愛的店員見上一面,他常常去店裡消費,而且他都點店裡最貴的150元豪華便當,希望讓店員覺得他是個豪氣的人。** **最近便當店推出集點活動,每次買便當可以拿到1點,只要集到5點就可以折50元。** **小黑覺得這是老闆在暗中撮合他跟女店員,於是決定把這個月的餐費都拿來買這家的便當,請問他可以買幾個便當?** ![](https://i.imgur.com/01q64C8.png) ```python= money=eval(input()) point=0#點數 food=0#便當 while(money>=150): point+=1 money-=150 food+=1 if point==5: point=0#點數規0 money+=50#便當變為100 print(food) ``` ```python= n=int(input()) cnt=0 while n>=150: cnt+=1 n-=150 if cnt%5==0: n+=50 print(cnt) ``` ```python= n=int(input()) p=0 a=0 while n>=0 : if p>=5: p-=4 #超過5點又可以拿到1點 =4 n-=100 #打折50塊錢,所以這個便當只要100 else : n-=150 p+=1 a+=1 print(a) ``` ## 202112 CSF程速勁賽 決賽 2-多少個騎士 ![](https://i.imgur.com/UBnNVtW.png) 騎士(Knight) 是西洋棋中的一種棋子。走法是走「日」字,或英文字母大写的 “L” 形:即先向左(或右)走1格,再向上(或下)走2格;或先向左(或右)走2格,再向上(或下)走1格。 請問在一個 $m * n$ 大小的棋盤下,最多可以同時放下幾個騎士,使得任一個騎士無法吃掉其他騎士(只走一步的情況)? 2. 輸入輸出 **輸入說明** 第一列:$m, n$ 分別代表棋盤的長、寬($1 \leq m, n \leq 500$) **輸出說明** 輸出最多可以同時放下幾個騎士,使得任一個騎士無法吃掉其他騎士 ![](https://i.imgur.com/SVQgcxV.png) ![](https://i.imgur.com/2Ngr4XA.png) ![](https://i.imgur.com/8mmfspj.png) ![](https://i.imgur.com/gnZtIvV.png) ![](https://i.imgur.com/TAcyRIV.png) ```python= # by TFH m,n=(input().split(" ")) m=int(m) n=int(n) def f(n,m): if n<m: return f(m,n) elif m==1: return n elif m==2: if (n%4>1): return (n//4)*4+2*2 #4個4個一組,有幾組 else: return (n//4)*4+(n%4)*2 #奇數的話中間可以多放一個 else: return (n*m+1)//2 print(f(m,n)) ``` ## 202112 CSF程速勁賽 決賽 3-5倍券精算師 ![](https://i.imgur.com/yn1oaXN.png) **100為單位** ![](https://i.imgur.com/oXg4Po8.png) ```python= a=[int(eval(x)/100) for x in input().split(' ')] dp=[False]*51 dp[0]=True for i in range(len(a)): for j in range(50,a[i]-1,-1): dp[j]=dp[j] or dp[j-a[i]] if dp[50]: print(i+1) break ``` ## 202205 CSF程速勁賽 決賽 2-三角旗設計圖 1. 設計說明: 校慶的班級布置中,你的工作是依照需求完成三角旗的設計。 三角旗是由若干個倒立實心的等腰三角形組成,數量不超過5個。 請設計一程式,根據使用者輸入的三角形腰長,用 * 印出對應三角旗的形狀。 2. 輸入輸出: 輸入說明 不超過5個數字(大於等於0的數字),代表等腰三角形的腰長(以半形空格為間隔) 輸出說明 用 * 輸出對應的三角旗形狀,每個三角形之間需有一個半形空格 (每一列的最後一個 * 右側沒有空格) ![](https://i.imgur.com/tJtvVId.png) ```py= arr=[int(i) for i in input().split(" ")] ans=[] for i in range(len(arr)): for j in range((arr[i])): ans.append(("*"*(j+1)).ljust(max(arr))) for j in range((arr[i])-1): ans.append(("*"*(arr[i]-j-1)).ljust(max(arr))) if arr[i]!=0: ans.append((" ")*(max(arr))) # print(ans) for i in range((max(arr))): tmp="" for j in range(len(ans)-1): tmp+=ans[j][i] print(tmp.rstrip(),end="") # print("o",end="") #取消註解可以證明沒空白 if i != (max(arr))-1: print() ```