【7-4 h0018.金币 (20 分)】思路清晰,c++实现,分分钟解决

【7-4 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

我先说下思路,首先找下规律哈!1天就是1,两天就是22,三天33,是吧 ?找到规律了吧,找个变量,一个记录总量sum,一个记录num天数就ok了,但是呢我第一次刚写完了,发现有几个样例有问题,比如输入7,就会卡那,我想了一下,原来是,有可能使用i*i会超出天数,所以得判断一下然后再计数就可以了!有问题可以评论区,也可以私信我哦!希望大家可以点赞支持!谢谢啦!

#include

using namespace std;

int main(){
	
	int n;
	cin>>n;
	while(n!=0){
		
		int sum=0;
		int num=0;
		for(int i=1;num!=n;i++){
			if(num+i >n){
				int k = num+i-n;
//				cout<<"k"<
				sum+=i*i-i*k;
				break;
			}
			num+=i;
			sum+=i*i;
			
		}
		cout<<n<<" "<<sum<<endl;
		cin>>n;
		
	}
	
}

你可能感兴趣的:(数据结构,c++)