【GESP二级】骑士的金币 - 金币奖励计算
思路: 根据题目描述,可以看出骑士在连续的N天内每天收到N枚金币,然后在之后的连续N+1天内每天收到N+1枚金币。 所以可以通过一个循环来计算骑士在给定天数内获得的金币数。
具体实现步骤如下:
- 读入给定天数n。
- 初始化变量totalCoins为0,用来记录骑士获得的金币数。
- 初始化变量currentCoins为1,表示当前连续的天数内每天应该收到的金币数。
- 初始化变量days为1,表示当前连续的天数。
- 使用一个循环,循环变量i从1到n。
- 在循环中,首先将currentCoins加到totalCoins中。
- 然后将days减1,表示之前的一天已经过去。
- 如果days减到0,表示当前连续的天数已经结束。
- 将currentCoins加1,表示进入下一段连续的天数。
- 将days设为currentCoins,表示连续的天数。
- 输出totalCoins,即骑士获得的金币数。
时间复杂度分析: 循环的次数为给定天数n,所以时间复杂度为O(n)。
空间复杂度分析: 只使用了常数个额外变量,所以空间复杂度为O(1)。
实现代码如下:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int totalCoins = 0;
int currentCoins = 1;
int days = 1;
for (int i = 1; i <= n; i++) {
totalCoins += currentCoins;
days--;
if (days == 0) {
currentCoins++;
days = currentCoins;
}
}
cout << totalCoins << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/qjaP 著作权归作者所有。请勿转载和采集!