國王將金幣作為工資,發放給忠誠的騎士。 問題 G: 金幣
阿新 • • 發佈:2019-01-25
題目描述
國王將金幣作為工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;之後兩天(第二天和第三天),每天收到兩枚金幣;之後三天(第四、五、六天),每天收到三枚金幣;之後四天(第七、八、九、十天),每天收到四枚金幣……;這種工資發放模式會一直這樣延續下去:當連續N天每天收到N枚金幣後,騎士會在之後的連續N+1天裡,每天收到N+1枚金幣。
請計算在前K天裡,騎士一共獲得了多少金幣。
輸入
輸入只有1行,包含一個正整數K(1≤K≤10000),表示發放金幣的天數。
輸出
輸出只有1行,包含一個正整數,即騎士收到的金幣數。
樣例輸入
6
樣例輸出
14
提示
騎士第一天收到一枚金幣;第二天和第三天,每天收到兩枚金幣;第四、五、六天,每天收到三枚金幣。因此一共收到 1+2+2+3+3+3=14 枚金幣。
程式碼看著很簡單,但是想了快十分鐘。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int i,j,sum=0,sumd=0,n,ans;
scanf("%d",&n);
for (i=1;;i++) {
sum+=i;
if (sum>=n) break;
}
i--;
for (j=1;j<=i;j++)
sumd+=j*j;
ans=(1 +i)*(n-(sum-i-1))+sumd;
printf("%d\n",ans);
return 0;
}