题目
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
输入
一个整数(范围1到10000),表示天数。
输出
骑士获得的金币数。
样例输入 Copy
6
样例输出 Copy
14
思考
刚刚做过打印乘法表的题目
就是
11
12 22
13 23 33
14 24 34 44
是用两层for
这个是
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
代码
// An highlighted block
int n,m=0,d=0,flag=1;
cin>>n;
for(int i=1;i<=n&&flag==1;i++){
for(int j=1;j<=i&&flag==1;j++){
m+=i;
d++;
if(d>=n)
flag=0;
}
}
cout<<m;
本来的写法:
// An highlighted block
int n,m=0,d=0;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
m+=i;
d++;
}
if(d>=n)
break;
/*天数d达到n天时就break这个循环,但是这里的问题就在于
1223334444...,如果在第二个4 的时候达到天数了还是会加
上4个4,出去后再判断d和n,这样多加了几天*/
/*但是直接移到循环里面又不能跳出最外层for循环所以用到
flag的这种用法*/
}
cout<<m;