其他分享
首页 > 其他分享> > [2015年NOIP普及组] 金币

[2015年NOIP普及组] 金币

作者:互联网

[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