題目描述
國王將金幣作爲工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;之後兩天(第二天和第三天),每天收到兩枚金幣;之後三天(第四、五、六天),每天收到三枚金幣;之後四天(第七、八、九、十天),每天收到四枚金幣......;這種工資發放模式會一直這樣延續下去:當連續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)