[2015年NOIP普及组] 金币
思路:第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
分析:此题可以在题目所给天数内先循环,用计数器来记录每种工资,同时记录总工资。(总工资=不同种 工资种类*天数 的总和)。另外还可能存在工资种类的天数卡在题中天数左右的情况,可以把这种工资的情况单拿出来算。
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int h=0;//记录前一个i
int i,l=1,sum=0;
for(i=1;i<=n;i+=l)
{
sum+=l*(i-h);//总的金币相加。算的是在题中的天数内,每一种 发相同工资的天数*工资 的总和。
l++;//下一次给的金币数,每天+1,1.2.3…
h=i;//记录分下一种工资的前一天,(i-h)就可以得到发工资都相同的天数 (这里的i是下一个,i-h=l)
}
if(i!=n)//如果不相等说明sum小于真实值,就是不满足下一个同样工资的天数!=(i-h)个;
sum+=(n-h)*l;//将剩余的加起来
cout<<sum;
return 0;
}
标签:收到,NOIP,int,工资,sum,金币,天数,2015 From: https://www.cnblogs.com/xdzxyingrui/p/16582193.html