1. 程式人生 > >國王將金幣作為工資,發放給忠誠的騎士。 問題 G: 金幣

國王將金幣作為工資,發放給忠誠的騎士。 問題 G: 金幣

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