#44280: python 除了用 if 判斷奇偶後公式解外,還有這些方式能用


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 不指定學校
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2024-11-20 02:57:17
f423. 高雄市109年資訊競賽國中組第一題 -- 2020高雄市資訊學科能力複賽109高雄市資訊學科能力複賽 | From: [123.192.228.253] | 發表日期 : 2024-11-19 18:01

(類似的題目: d490, d022)

如果你會等差數列,那這題就很簡單

所以我決定分享其他手段,幫大家增加手牌,也許以後就用上了

 

方法1: 公式解,用 if 判斷奇偶後,套等差數列和公式解 (寫不出這個或其他類似的東西,你可能要複習一下基礎語法和等差數列)

n = int(input())
if n % 2 == 0:
  n -= 1
print((1 + n) * (n // 2 + 1) // 2)

 

方法2-1: 暴力解,用 range 遍歷過程中所有的奇數

n = int(input())
result = 0
for i in range(1, n + 1, 2):
    result += i
print(result)

 

方法2-2: 暴力解(?),range 這東西,其實是可以直接 sum 的

n = int(input())
print(sum(range(1, n + 1, 2)))

 

方法2-3: 你要寫在同一行其實也可以啦,就......少設一個變數

print(sum(range(1, int(input()) + 1, 2)))

 

方法3: 還是公式解,但不使用 if,利用布林值 True 在 python 中可以被當成 1,False 可以被當成 0 的特性,這個比較難

n = int(input())
print((n + (n % 2 != 0)) * ((n + 1) // 2) // 2)

 

方法4: 用 lambda 把上面那個公式解再壓縮,可以用一行搞定,缺點就是不太好讀,一般也不推薦 python 這樣寫 (不鼓勵任何可讀性差的寫法)

print((lambda n: (n + (n % 2 != 0)) * ((n + 1) // 2) // 2)(int(input())))

 

 
ZeroJudge Forum