洛谷P2669-金币
这个题目乍一看好像很简单,网上的做法也是千奇百怪,有用公式的,有模拟成三角形的,现在我们来看看另一种解法,看下面这段代码,第一次看到这个for循环是不是以为for循环内部要执行a次,很多时候我们不会对for循环中的循环条件进行变化,这个代码中循环条件是i<=a,再看for循环内部的代码,a每次会随i变化,这就是这个方法独特的一处,for循环执行的次数是随时变化的,for循环每执行一次a就减i实际上for循环只执行了三次,例如我输入的是6 第一次a=6 第二次 a = 5 第三次a = 3 a=0退出for循环,1+2 * 2 + 3 * 3 = 14
#include<iostream>
using namespace std;
int main()
{
int a,b=0,c=1,i;//a为天数,b为金币,c为每天比原来每天多获得的金币数
cin>>a;
for(i=1;i<=a;i++)
a-=i,b+=c*c,c++;//金币每天加上c的2次方,天数当然要减i了
cout<<b+a*c;//最后算上剩余的a乘加的最多一次的c
return 0;
}