金幣問題

題目描述

* 國王將金幣做爲工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;以後兩天(次日和第三天),天天收到兩枚金幣;以後三天(第4、5、六天),天天收到三枚金幣;依次類推。。當連續N天天天收到N枚金幣後,騎士會在以後的連續N+1天裏,天天收到N+1枚金幣。

輸入樣例:輸入 6    輸出   14
                                    輸入  1000     輸出   29820
騎士第一天收到一枚金幣;次日和第三天,天天收到兩枚金幣;第4、5、六天,天天收到三枚金幣。所以一共收到1+2+2+3+3=14枚金幣。

C++代碼實現

  • 計算天天工資,再累計
    #include <iostream>
    using namespace std;

int main()
{
int data; //幾天
cin >> data;
int tmp = 1; //天天的工資
int sum = 0; //總工資
for (int i = 0, j = 0; i < data; i++)
{
sum += tmp;
j++;
if (j >= tmp){ //漲工資
tmp++;
j = 0;
}
}
cout << sum << endl;ios

system("pause");
return 0;

}ide

* 轉換思路:假設連續N天的 N個金幣  所有發給騎士,當計算的日期超過實際日期時,減去未發的金幣。代碼實現以下:

#include <iostream>
using namespace std;spa

int main()
{
int data; //實際幾天
cin >> data;
int tmp = 1; //天天的工資
int sum = 0; //總工資code

int t = 0;

while (t < data)    //t>=data中止
{   
    sum += tmp*tmp; //假設全發給騎士
    t += tmp;       //天數
    tmp++;      
}
//注意此時天天的工資是 tmp-1
sum -= (t - data)*(tmp-1);      //實際應發的工資

cout << sum << endl;

system("pause");
return 0;

}ci

相關文章
相關標籤/搜索