国王将金币作为工资,发放给忠诚的骑士。第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