# s004: 列出偶數 ### 題目說明 輸入一串數字,如 1 2 3 4 5 6 7 8 9 10 請列印當中出現的偶數 也就是要印出 2 4 6 8 10 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 輸入會有n個數字,n<=100,數字之間會用空白隔開,且至少會出現一個偶數 | 由前至後依序輸出出現的偶數,中間用一個空白隔開 | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 9 1 5 9 8 7 8 1 2 6 5 2 | 8 8 2 6 2 | ### 範例程式碼 ```python nums = input().split() # 將輸入的字串以空白分隔並存入列表 for v in nums: # 變數 v 每次會依序變成 nums 中的元素並執行 for 下方縮排的內容 if int(v) % 2 == 0: # 將 v 變為 int 型態並取餘數,若結果為 0 則執行 if 下縮排的內容 print(v, end=' ') # 輸出變數 v 的值並以一個空白作為結尾,且下一行會接續此行輸出 ``` # s005: 成績統計 ### 題目說明 輸入不定個數的分數 如 10 -1 5 9 100 125 300 95 96 規則為只採計0~100之間的分數(含0和100) 請你輸出篩出來的這些數字的: 1.輸出篩選過後的數字列表,由前至後依序輸出,順序不可顛倒 2.最大值 3.最小值 4.總和 5.平均值 ( 請四捨五入到小數點後第一位,要呼叫round()的函式 ) 如果每個成績都不在0~100的區間範圍內,請輸出error ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 輸入分數可能有x個,x<=1000,每個分數的範圍介於-300~300之間 | 請依照題目說明,輸出這些篩選過後的數字、最大值、最小值、總和和平均,第1點中的每個數字之間用空白隔開,而1\~5每個要輸出的項之間以換行隔開,詳細可見範例輸入跟輸出的結果<br>如果每個成績都不在0\~100的區間範圍內,請輸出error<br>(提示:可以用len(data)當作if else的判斷條件,來決定要不要輸出東西) | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 10 -1 5 9 100 125 300 95 96 | 10 5 9 100 95 96<br>100<br>5<br>315<br>52.5 | ### 範例程式碼 ```python raw_data = [int(x) for x in input().split()] # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表。 new_data = [] # 宣告一個空列表 new_data ,用於儲存在閉區間 [0,100] 內的數 for v in raw_data: # 變數 v 每次會依序變成 raw_data 中的元素並執行 for 下方縮排的內容 if 0 <= v <= 100: # 若 v 在閉區間 [0,100] 內則執行 if 下縮排的內容 new_data.append(v) # new_data 列表加入 v if len(new_data) == 0: # 如果 new_data 列表的元素個數為 0, # 即沒有資料在閉區間 [0,100] 內,則執行 if 下縮排的內容。 print("error") # 輸出 "error" else: # 若上方 if 條件不成立,則執行 else 下縮排的內容 for v in new_data: # 變數 v 每次會依序變成 new_data 中的元素並執行 for 下方縮排的內容 print(v, end=' ') # 輸出變數 v 的值並以一個空白作為結尾,且下一行會接續此行輸出 print() # 換行(輸出 "\n") print(max(new_data)) # 輸出 max(new_data) 的結果,即 new_data 中最大的元素 print(min(new_data)) # 輸出 min(new_data) 的結果,即 new_data 中最小的元素 print(sum(new_data)) # 輸出 sum(new_data) 的結果,即 sum_data 所有元素的和 print(round(sum(new_data) / len(new_data), 1) # 輸出 round(sum(new_data) / len(new_data), 1) 的結果 # 其中 len(new_data) 的結果為 new_data 列表的元素個數 # sum(new_data) / len(new_data) 的結果即為平均數 # round(sum(new_data) / len(new_data), 1) 的結果為將平均四捨五入到小數點後第1位 ``` # s006: 老王的強迫症 ### 題目說明 老王喜歡種花,但他是一個有強迫症的人,所以種花時會將花之間的距離設置好 舉例來說,若給定 10 1 2 則代表有10格的空地,從第1個空地開始,每兩格要種上一朵花,因此花圃的情況必須變得像這樣(1為代表有種花,0為空地) 1 0 1 0 1 0 1 0 1 0 但老王有可能有時候沒算好,導致花朵誤植的情形,而老王只要每次發現他的花圃沒有整齊的排好,他一整天的心情就會很糟糕,鄰居可能會因此受到不必要的遷怒 身為他的鄰居,你要避免老王來拆你的家,所以善良的你決定幫助老王檢視他每次花圃的種植情形,也就是花朵不能多種也不能少種 請你判斷老王目前花圃的種植情形,是否符合老王提出的規則 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 輸入前三列為三個整數n、k、s,依序為<br>1.老王有n格空地<br>2.老王要從左邊數過來第k塊地開始種植花朵<br>3.老王每s格就要種一朵花<br>接著有一列n個數字,代表花圃的情形,其中0代表沒有種花,1代表有種花 | 如果符合老王的規則,請輸出yes;否則如果花種的個數太多或間隔不對,請輸出no | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 10<br>1<br>3<br>1 0 0 1 0 0 1 0 0 1 | yes | | 10<br>1<br>3<br>1 0 0 1 0 0 1 0 1 0 | no | | 10<br>1<br>3<br>1 0 0 1 0 0 1 0 1 1 | no | ### 範例程式碼 ```python n = int(input()) # 宣告變數 n 並初始化其值為 輸入的字串轉為整數 k = int(input()) # 宣告變數 k 並初始化其值為 輸入的字串轉為整數 s = int(input()) # 宣告變數 s 並初始化其值為 輸入的字串轉為整數 garden = [int(x) for x in input().split()] # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表。 flower = sum(garden) # 宣告變數 s 並初始化其值為 sum(garden),即花朵的總數 if len(garden[k-1::s]) == flower and sum(garden[k-1::s]) == flower: # 如果 len(garden[k-1::s]) == flower 且 sum(garden[k-1::s]) == flower, # 則執行 if 下縮排的內容。 # 切片 garden[k-1::s] 會返回一個列表, # 其內容為 garden 列表中從索引值 k-1 開始到最後一個元素每隔 s 格的元素, # 即所有應該要種花的格子。 # len(garden[k-1::s]) == flower 即測試要種花的格子的數量(理應要種的花朵數) # 是否和花園裡面實際上種的花朵數量相等,若不相等則表示實際種的花朵數量不對。 # sum(garden[k-1::s]) == flower 即測試要種花的格子中實際種的花的數量 # 是否和花園裡面實際上種的花朵數量相等,若不相等則表示有花朵種在不該種的格子裡。 print("yes") # 輸出 "yes" else: # 若上方 if 條件不成立,則執行 else 下縮排的內容 print("no") # 輸出 "no" ``` # s007: 峰值判斷 ### 題目說明 給定一個不定數字的數列,中間用空白隔開 請你計算有多少個數字是同時間比兩邊的數字還大(最左側和最右側的數字不列入計算,因為他們旁邊只有一個數字) 舉例來說 1 2 **4** 2 9 9 5 **9** 1 3 其中符合規則的數字以粗體表示,這些數字都比左右旁邊兩格的數字來的大 因此總共有兩個數字符合規則 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 給定一個不定個個數數字的數列,中間以空白隔開,其中每個數的範圍介於-1000~1000之間 | 輸出有多少個數字是屬於峰值(比左右相鄰兩格還來得大) | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 1 2 4 2 9 9 5 9 1 3 | 2 | ### 範例程式碼 ```python nums = [int(x) for x in input().split()] # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表。 count = 0 # 宣告變數 count ,用於紀錄有幾個符合條件的數字(峰值) for i in range(1, len(nums) - 1): # 變數 i 每次會依序變成 range(1,len(nums) - 1) 中的元素並執行 for 下方縮排的內容, # 其中 range(1, len(nums) - 1) 會產生一個內容為從 1 到 (len(nums) - 1) - 1 的整數的列表。 if nums[i] > nums[i - 1] and nums[i] > nums[i + 1]: # 如果 nums 索引值 i 的元素是否大於 nums 索引值 i-1 的元素 # 且 nums 索引值 i 的元素是否大於 nums 索引值 i+1 的元素, # 即判斷 nums 索引值 i 的元素是否符合題目定的峰值,若是則執行 if 下縮排的內容。 count += 1 # count 變數加 1 print(count) # 輸出 count ``` # s008: 正負相間 ### 題目說明 給定一個不定數字的數列,中間用空白隔開 請你計算有多少組相鄰的數字是之間是同號 **(也就是同為正數或同為負數)** 舉例來說 1 5 -1 -3 6 7 -5 -8 9 -9 -9 則滿足的組別有 1 5 -1 -3 6 7 -5 -8 -9 -9 因此答案為5 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 給定一個不定個個數數字的數列,中間以空白隔開,其中每個數的範圍介於-1000~1000之間,數字不含0,保證必為負數或為正數 | 輸出有多少組相鄰數字是同號的 | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 1 5 -1 -3 6 7 -5 -8 9 -9 -9 | 5 | ### 範例程式碼 ```python nums = [int(x) for x in input().split()] # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表。 count = 0 # 宣告變數 count ,用於紀錄有幾個符合條件的數字 for i in range(len(nums) - 1): # 變數 i 每次會依序變成 range(len(nums) - 1) 中的元素並執行 for 下方縮排的內容, # 其中 range(len(nums) - 1) 會產生一個內容為從 0 到 (len(nums) - 1) - 1 的整數的列表。 if nums[i] * nums[i+1] > 0: # 如果 nums 索引值 i 的元素乘以 nums 索引值 i + 1 的元素大於 0, # 即判斷 nums 索引值 i 的元素和右方的元素是否同號,若是則執行 if 下縮排的內容。 count += 1 # count 變數加 1 print(count) # 輸出 count ``` # s012: Combo game ### 題目說明 輸入一個數字n,請依照範例輸入的格式輸出combe連擊數 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 輸入一個數字n,1<=n<=1000。 | 輸出 n hits 到 1 hit | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 10 | 10 hits!<br>9 hits!<br>8 hits!<br>7 hits!<br>6 hits!<br>5 hits!<br>4 hits!<br>3 hits!<br>2 hits!<br>1 hit! | ### 範例程式碼 ```python n = int(input()) # 宣告變數 n 並初始化其值為 輸入的字串轉為整數 for i in range(n, 1, -1): # 變數 i 每次會依序變成 range(n, 1, -1) 中的元素並執行 for 下方縮排的內容, # 其中 range(n, 1, -1) 會產生一個內容為從 n 倒數到 2 的整數的列表。 print(i, "hits!") # 輸出 i 和 "hits" 並以空格分隔 print("1 hit!") # 輸出 "1 hit" ``` # s014: 組別戰力 ### 題目說明 某國家開啟了世紀決鬥運動會 總共有n組不同的組別參賽於此項賽事中,而這n組的組別人數都一致 但由於選手個人差異,導致在比賽開始前,評委對於每位選手有不一樣的評分 因為本次賽事有開啟賽前預測投票的活動,所以投票者們想知道哪些組別可能有比較高的獲勝機率 其中一個方法就是透過組別戰力值總和來判斷 舉例來說 3 7 8 7 7 9 8 8 6 8 7 9 9 9 5 6 代表的是有三個組別,每個組別皆有五個人 第一組的戰力總和為 7+8+7+7+9 = 38 第二組的戰力總和為 8+8+6+8+7 = 37 第三組的戰力總和為 9+9+9+5+6 = 38 這裡想要請你撰寫程式,計算哪個組別的戰力值最高,若有多個戰力值相同,請輸出組別編號最大的那個組別 以此例來說,應該要輸出3。 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 第一行有一個數字n,代表的是有n個組別(1<=n<=100)<br>接下來的n行,每行皆有同樣數量的整數(該數量介於1~30之間),代表該組的組別人數<br>其中每個數字x代表該組中某位選手的戰力值(1<=x<=15) | 計算哪個組別的戰力值最高,若有多個戰力值相同,請輸出組別編號最大的那個組別。 | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 3<br>7 8 7 7 9<br>8 8 6 8 7<br>9 9 9 5 6 | 3 | ### 範例程式碼 ```python n = int(input()) # 宣告變數 n 並初始化其值為 輸入的字串轉為整數 _max = -1 # 宣告變數 _max ,用於紀錄當前的戰力最大值 index = -1 # 宣告變數 index ,用於紀錄當前看到的戰力最大值的組別 for i in range(n): # 變數 i 每次會依序變成 range(n) 中的元素並執行 for 下方縮排的內容, # 其中 range(n) 會產生一個內容為從 0 到 n - 1 的整數的列表。 _sum = sum([int(x) for x in input().split()]) # 宣告變數 _sum 並初始化其值為 sum([int(x) for x in input().split()])。 # 其中 [int(x) for x in input().split()] 表示 # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表, # sum([int(x) for x in input().split()]) 表示 # 列表 [int(x) for x in input().split()] 中所有元素的和,即當前這組的戰力值。 if _sum >= _max: # 如果 _sum 大於等於 _max ,即當前這組戰力值是否大於等於當前的戰力最大值, # 若是則執行 if 下縮排的內容。 _max = _sum # 將 _max 改為 _sum,即將當前的戰力最大值變為當前這組戰力值 index = i + 1 # 將 index 改為 i + 1 (索引值從 0 開始,但組的編號從 1 開始), # 即將當前戰力最大值的組別變為當前組別。 print(index) # 輸出 index ``` # s016: 結帳策略 ### 題目說明 喜歡購物的小叡看到新開的桃高超商在舉辦優惠活動,活動內容為「每購物滿三件商品,其中最便宜的商品免費。」雖然小叡很心動,可是對於數學不好的他來說,一次性的算出怎麼樣消費才可以省下最多錢太難了,因此他靈光一動,想出了屬於自己的方法。 小叡想到的方法就是將自己購買商品的金額從大排到小,接著從左到右每三個一組的方式來結帳。舉例來說,若小叡購買了三件商品,金額分別為200、100、300,則小叡會先把他們的價格由大到小排列成300、200、100。接著小叡就可以馬上知道送的商品是100元的商品,因此他省下了100元。 給你小叡購買的商品數量以及他購買的每項商品的價格,請你依照小叡的結帳策略來幫他計算總共可以省下多少錢。 ### 輸入輸出說明 | 輸入說明 | 輸出說明 | | -------- | -------- | | 輸入第一行有一個整數 N,N 的範圍介於 1 到 300 之間,代表的是接下來有幾個數字。<br>第二行有 N 個整數,每個數字的範圍介在 1 到 10000 之間,代表的是小叡所有購買商品個別的價格。 | 請依照小叡的結帳策略,輸出小叡總共省下了多少錢。 | ### 範例輸入輸出 | 範例輸入 | 範例輸出 | | -------- | -------- | | 8<br>80 70 60 50 40 30 20 10 | 90 | ### 範例程式碼 ```python n = int(input()) # 宣告變數 n 並初始化其值為 輸入的字串轉為整數 nums = sorted([int(x) for x in input().split()], reverse=True) # 宣告變數 nums 並初始化其值為 sorted([int(x) for x in input().split()], reverse=True)。 # 其中 [int(x) for x in input().split()] 表示 # 變數 x 每次會依序變成 input().split() 列表中的元素, # 並執行 int(x) ,然後將結果放入列表, # sorted([int(x) for x in input().split()],reverse=True) 表示 # 將列表 [int(x) for x in input().split()] 由大到小排序。 ans = 0 # 宣告變數 ans ,用於紀錄答案(可以省下的錢) for i in range(2, n, 3): # 變數 i 每次會依序變成 range(2, n, 3) 中的元素並執行 for 下方縮排的內容 # 其中 range(2, n, 3) 會產生一個內容為從 2 到 n - 1 每隔 3 的整數的列表 ans += nums[i] # ans 加上 nums 索引值 i 的元素,即累加可以省下的錢 print(ans) # 輸出 ans ```