GESP二级 - 骑士的金币:计算奖励金币的算法
骑士的金币:计算奖励金币的算法
问题描述:
国王将金币作为奖励,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
输入描述:
一个整数(范围1到10000),表示天数。
输出描述:
骑士获得的金币数。
用例输入 1:
6 用例输出 1:
14
思路:
根据题目描述,可以得到以下规律:
第一天获得1个金币,第二天获得2个金币,第三天获得2个金币,第四天获得3个金币,第五天获得3个金币,第六天获得3个金币,第七天获得4个金币,第八天获得4个金币...以此类推。
可以观察到,第n天获得的金币数量是从1开始递增的,递增的规律是:连续n天的金币数量都是n个。所以可以使用一个循环来模拟这个过程。
具体算法如下:
- 读入一个整数n,表示天数。
- 定义一个变量sum,初始值为0,用于记录骑士获得的金币总数。
- 定义一个变量count,初始值为1,用于记录连续n天的金币数量。
- 定义一个变量day,初始值为1,用于记录当前的天数。
- 进入循环,循环条件为day <= n:
- 在循环中,将count个金币加到sum中。
- 将day增加1。
- 如果day是连续n天的最后一天,则将count增加1。
- 输出sum。
代码如下:
#include <iostream>
int main() {
int n;
std::cin >> n;
int sum = 0;
int count = 1;
int day = 1;
while (day <= n) {
sum += count;
day++;
if (day % (count + 1) == 1) {
count++;
}
}
std::cout << sum << std::endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/qjaU 著作权归作者所有。请勿转载和采集!