# 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
```