【Python】Comet OJ C0224 [2015普及組-A]金幣

題目描述

國王將金幣作爲工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;之後兩天(第二天和第三天),每天收到兩枚金幣;之後三天(第四、五、六天),每天收到三枚金幣;之後四天(第七、八、九、十天),每天收到四枚金幣......;這種工資發放模式會一直這樣延續下去:當連續N天每天收到N枚金幣後,騎士會在之後的連續N+1天裏,每天收到N+1枚金幣。

請計算在前K天裏,騎士一共獲得了多少金幣。

輸入描述

只有1行,包含一個正整數K,表示發放金幣的天數。

輸出描述

只有1行,包含一個正整數,即騎士收到的金幣數。

樣例輸入 1

6

樣例輸出1

14 

樣例輸入2

1000 

 樣例輸出2

29820

思路解析:

轉化成數學知識就很好計算了,具體爲:

1、k算作和,就是數列1,2,3,4...的和,當這個數列的前n項和正好大於等於k,記下這個n(代碼中爲index)以及這個和sum;

2、然後計算金幣數,即是前n-1項1^2,2^2,3^3,4^4......(n-1)^2的和,記下爲gold;

3、用gold + (k - (sum - index) ) * index,這纔是最終的gold

代碼如下:

#C0224 [2015普及組-A]金幣.py

k = eval(input())
Sum = 0
index = 0
gold = 0
for i in range(1,k+1):             #計算和,記下Sum>=k的i值,一定從1開始加到k(k也得能加進去)
    Sum += i
    if Sum >= k:
        index = i
        break
for j in range(1,index):           #計算金幣數
    gold += j * j
gold += index * (k - (Sum - index))#關鍵讀懂
print(gold)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章