信息学奥赛一本通-1100

国王将金币作为工资,发放给忠诚的骑士。第1天,骑士收到一枚金币;之后两天(第2天和第3天)里,每天收到两枚金币;之后三天(第4、5、6天)里,每天收到三枚金币;之后四天(第7、8、9、10天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续n天每天收到n枚金币后,骑士会在之后的连续n+1天里,每天收到n+1枚金币(n为任意正整数)。

你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。

#include <iostream>
using namespace std;

int main(){

	int n,day=0,sum=0;
	cin>>n;
	for(int i = 1 ; i <= n ; i++){
		for(int j = 1 ; j <= i ; ++j){
			if(day >= n){
				break;
			}else{
				sum+=i;
				day++;
			}
		}
	}
	cout<<sum<<endl;
	
	return 0;
}

思路:

第一天1金币,第二天第三天2金币,那么我们可以反正看,拿1金币的有一天,拿2金币的有两天,写一个for循环使用i变量来代表拿多少金币,i变量为3的时候,说明有3天需要拿i(3)金币,这里再使用一个for循环使用j变量来代表要拿几次i金币,直接求和sum+=i不行,例如输入n==5,这里求和次数多了,(5!次求和),与题意不符合,必须再加一个day变量,统计天数,并且恰当时候退出,如代码所示

注:思路理解和解题各有不同,本人是想用最简单的方法实现,目的是给初学的小朋友写的通俗易懂,一般不包含算法优化在内,如果有错误请联系博主更改,非常感谢您的批评指正,也可以通过邮箱联系我,2456381129@qq.com

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值