当前位置:首页题目 > 正文

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按照连续天数的长度进行划分,然后计算每个连续天数段的金币数量。具体算法如下:

  1. 读取输入的天数K。

  2. 初始化变量totalCoins为0,表示骑士收到的金币总数。

  3. 初始化变量count为1,表示当前连续天数每天收到的金币数。

  4. 初始化变量currCount为1,表示当前连续天数的计数。

  5. 使用循环遍历天数day,从1到K:

    • 将count加到totalCoins中。

    • 如果currCount等于count,表示当前连续天数已达到count,将count加1,并重置currCount为1。

    • 否则,将currCount加1。

  6. 输出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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击