NOIP基础算法(C++)-模拟算法例题1-金币
作者:野牛程序员:2023-07-03 17:13:32题目阅读 3068
NOIP基础算法(C++)-模拟算法例题1-金币
【题目描述】
国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。请计算在前K天里,骑士一共获得了多少金币?
输入格式:
一个正整数K,表示发放金币的天数。
输出格式:
一个正整数,即骑士收到的金币数。
输入样例:
6
输出样例:
14
说明:骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。
根据题目规律,我们可以将天数K按照连续天数的长度进行划分,然后计算每个连续天数段的金币数量。具体算法如下:
读取输入的天数K。
初始化变量totalCoins为0,表示骑士收到的金币总数。
初始化变量count为1,表示当前连续天数每天收到的金币数。
初始化变量currCount为1,表示当前连续天数的计数。
使用循环遍历天数day,从1到K:
将count加到totalCoins中。
如果currCount等于count,表示当前连续天数已达到count,将count加1,并重置currCount为1。
否则,将currCount加1。
输出totalCoins,表示骑士收到的金币总数。
#include <iostream> using namespace std; int main() { int K; cin >> K; // 读取输入的天数K int totalCoins = 0; // 初始化骑士收到的金币总数为0 int count = 1; // 当前连续天数每天收到的金币数 int currCount = 1; // 当前连续天数的计数 for (int day = 1; day <= K; day++) { totalCoins += count; // 将当前连续天数每天收到的金币数加到总数中 if (currCount == count) { // 如果当前连续天数已达到count count++; // 增加连续天数每天收到的金币数 currCount = 1; // 重置连续天数的计数 } else { currCount++; // 增加连续天数的计数 } } cout << totalCoins << endl; // 输出骑士收到的金币总数 return 0; }
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892