题解 | #[NOIP2015]金币#
[NOIP2015]金币
https://www.nowcoder.com/practice/8f71f5670e6a45118d24d13868a2da9e
#include <iostream>
using namespace std;
int main() {
int k;
cin>>k;
int d=1,less=k,sum=0;
while(less>=d){
sum +=d*d;
less = less-d;
d++;
}
sum += less*d;
cout<<sum;
}
k是需要算金币的天数,d是每次完整算钱需要几天,d=1是算一天的钱,d=2是算两天的钱。。。
less是剩余天数,sum是总金币数,如题金币计算为gold=1*1+2*2+3*3+....+n*n;
如果less>大于d就说明能够完整计算一轮n*n,即d*d;如果less<d则不能满足一轮要求,需要单独计算天数,因为剩余天数每经过一轮就会减去上轮天数,则less最终跳出循环后就是剩下的<d的天数,less*d就是最后需要加上的不是完整一轮的金币数;