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

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

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

  1. 理解模式:首先理解金币发放的模式。骑士在连续 nn 天每天收到 nn 枚金币,然后进入下一轮,连续 n+1 天每天收到 n+1 枚金币。

  2. 初始化变量:设置变量来跟踪当前的天数、每天收到的金币数以及到目前为止收到的金币总数。

  3. 循环处理:使用循环来模拟金币的发放过程。在每次循环中,计算当前阶段(即连续 nn 天)的金币总数,并累加到总金币数中。

  4. 更新天数:在每次循环结束时,更新剩余的天数。如果剩余天数不足以完成一个完整的阶段,则需要特殊处理剩余的天数。

  5. 计算剩余天数:如果经过一个完整的阶段后仍有剩余天数,计算剩余天数对应的金币数,并将其加到总数中。

  6. 输出结果:循环结束后,输出计算得到的总金币数。

详细步骤

  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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值