国王金币题目

题目

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
输入
一个整数(范围1到10000),表示天数。
输出
骑士获得的金币数。
样例输入 Copy
6
样例输出 Copy
14

思考

刚刚做过打印乘法表的题目
就是
11
1
2 22
1
3 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;
发布了20 篇原创文章 · 获赞 0 · 访问量 720

猜你喜欢

转载自blog.csdn.net/m0_37733257/article/details/95745402