h0018.金币 (20 分)

国王以金币支付给他忠诚的骑士。在他服役的第一天,骑士会得到一枚金币。 在接下来的每两天(服务的第二和第三天),骑士会收到两枚金币。在 在接下来的三天里(第四、第五和第六天),骑士每一天都会得到三枚金币。 在接下来的4天里(第七、第八、第九和第十天),每一天骑士会得到4枚金币。这种支付模式将无限期地持续下去:在每个N 在接下来的连续N+1天里,骑士将获得N+1个金币。

其中N是任意正整数。 请你编写程序将确定在任何给定的天数内支付给骑士的金币总数 (从第一天开始)。

输入格式:

输入的每一行(最后一行除外)都包含问题的一个测试用例的数据,由精确的 1个整数(取值范围1...10000),表示天数。输入的结束以一行作为信号包含数字0。

输出格式:

每个测试用例只有一行输出。先输出相应的一行输入的天数 ,后面跟着一个空格和支付给骑士的金币总数

在给定的天数内,从第一天开始。

输入样例:

10
6 
7
11
15
16
100
10000
1000
21
22
0

输出样例:

10 30
6 14
7 18
11 35
15 55
16 61
100 945
10000 942820
1000 29820
21 91
22 98

源代码

#include <iostream>
using namespace std;
int flag=0;//因最后输出结尾无换行标志一下 
int main()
{
	int n,sum,i,j,k;//金币奖励等于金币进阶天数 
	while(cin>>n,n!=0)
	{
		sum=0;//初始化总金额 
		j=1;//每隔多少天进行金币进阶 
		k=1;//所加金币数 
		for(i = 1;i <= n;i ++ )
		{
			sum+=k;
			if(i==j)//到达金币进阶天 
			{
				k++;//金币进阶 
				j+=k;//所隔天数更新 
			}
		}
		if(flag==0)
		{
			flag=1;//第一个正常输出不换行 
			cout<<n<<" "<<sum;
		}
		else cout<<endl<<n<<" "<<sum;//其余换行再输出 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/123693340