Hello 大家好我是小亦,今天呢我一整天都没有更新了,因为今天有学业在身,所以有点耽误出题解了,好那么好今天我们来讲得是来自NOIP2015年普及组的真题“金币~”,这道题如果放在这里非常非常的水啊,这还是国内吗,额不废话了,那么好思路公布给大家qwq:
首先呢这道题是让我们求模拟和数学就行了,非常的水,那么不多说已下呢是我搞出来的步骤,慢慢看~
初始化:设置初始值,day
为当前阶段的天数(初始为1),coin
为当前每天收到的金币数(初始也为1),sum
为收到的金币总数(初始为0)。
循环:使用一个循环来处理每个阶段。在循环中:
coin * min(k, day * coin)
。这里使用 min
函数是为了处理剩余天数不足以完成一个完整阶段的情况。sum += coin * min(k, day * coin)
。k -= day * coin
。这里乘以 day
是因为每个阶段的天数是连续的。更新阶段:在每次循环结束时,更新到下一个阶段。即增加 day
和 coin
的值。
结束循环:当 k
减到0或更少时,结束循环。
输出结果:循环结束后,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;
}
由于这道题过于简单,注释不提供了哈,代码包队的
因篇幅问题不能全部显示,请点此查看更多更全内容