* 國王將金幣做爲工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;以後兩天(次日和第三天),天天收到兩枚金幣;以後三天(第4、5、六天),天天收到三枚金幣;依次類推。。當連續N天天天收到N枚金幣後,騎士會在以後的連續N+1天裏,天天收到N+1枚金幣。 輸入樣例:輸入 6 輸出 14 輸入 1000 輸出 29820 騎士第一天收到一枚金幣;次日和第三天,天天收到兩枚金幣;第4、5、六天,天天收到三枚金幣。所以一共收到1+2+2+3+3=14枚金幣。
#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