搜索
您的当前位置:首页正文

(洛谷)题目题号 P2669 [NOIP2015 普及组] 金币~

来源:易榕旅网

Hello 大家好我是小亦,今天呢我一整天都没有更新了,因为今天有学业在身,所以有点耽误出题解了,好那么好今天我们来讲得是来自NOIP2015年普及组的真题“金币~”,这道题如果放在这里非常非常的水啊,这还是国内吗,额不废话了,那么好思路公布给大家qwq:

首先呢这道题是让我们求模拟和数学就行了,非常的水,那么不多说已下呢是我搞出来的步骤,慢慢看~

详细步骤

  1. 初始化:设置初始值,day 为当前阶段的天数(初始为1),coin 为当前每天收到的金币数(初始也为1),sum 为收到的金币总数(初始为0)。

  2. 循环:使用一个循环来处理每个阶段。在循环中:

    • 计算当前阶段的金币数:coin * min(k, day * coin)。这里使用 min 函数是为了处理剩余天数不足以完成一个完整阶段的情况。
    • 更新总金币数:sum += coin * min(k, day * coin)
    • 减少剩余天数:k -= day * coin。这里乘以 day 是因为每个阶段的天数是连续的。
  3. 更新阶段:在每次循环结束时,更新到下一个阶段。即增加 daycoin 的值。

  4. 结束循环:当 k 减到0或更少时,结束循环。

  5. 输出结果:循环结束后,sum 包含了前 k 天收到的金币总数,输出这个值。

这个思路可以确保我们正确地计算出在前 k 天里,骑士一共获得了多少金币,嗯我这么说大家应该能理解吧,好那么好,赶紧把代码供上,在这里小亦再次再次提醒大家,抄代码可耻

#include <iostream>
using namespace std;

int main() {
    int k;
    cin >> k;
    int day = 1, coin = 1, sum = 0;
    while (k > 0) {
        int days = day;
        sum += coin * min(k, days);
        k -= days;
        day++;
        coin++;
    }
    cout << sum << endl;
    return 0;
}

由于这道题过于简单,注释不提供了哈,代码包队的

因篇幅问题不能全部显示,请点此查看更多更全内容

Top