标签:收到 NOIP int 工资 sum 金币 天数 2015
[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 来源: https://www.cnblogs.com/xdzxyingrui/p/16582193.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。