首页 > 其他分享 >noi 1.5 45 金币

noi 1.5 45 金币

时间:2022-10-15 17:34:43浏览次数:36  
标签:1.5 noi 收到 int 天数 45 金币 循环 骑士

描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。

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

输入

输入一个整数(范围1到10000),表示天数。

输出

输出骑士获得的金币数。

样例输入

6

样例输出

14

题意

国王给骑士发工资,第一个循环连续一天收到一枚(1天),第二个循环连续两天收到2枚(2,3天),第三个循环连续3天收到3枚(4,5,6天),第四个循环连续4天收到4枚(7,8,9,10天),第五个循环连续5天收到5枚(11,12,13,14,15天)......第n个循环(骑士都干秃了)连续n天收到n枚·。

思路(如何进行循环)

根据题意我们可以知道:天数和金币是一样的,这个条件可以说是本题最有意思的地方,也是本题的突破口,这道题呢我们不能用正常做之前的题的逻辑思维去做,如果按照之前那个思维逻辑去做,那和我表妹听了医生说:“中暑了,每次吃一般藿香正气那个小颗粒。”然后我表妹就去一粒一粒数去一样,完全给想复杂了,而且还有一点不会便通,回归正题:因为他天数和金币是一样的,所以我们就可以用一个变量来表示(这里先将这个变量定义为c),然后我们需要一个变量来输入循环几天(这里将其定义为n),最后我们还需要一个变量来记录骑士总共获得了多少枚金币(这里将其定义为b),然后就是循环了,循环n天,i为现在的天数,每次i都加c,就是一个循环(for(int i=1;i<=n;i+=c)),每次循环我门都需要加上这连续几天每天都收到几枚金币(c*c)然后再把这个结果加到b里(b=b+c*c)就完成了一次循环,循环中我们会有剩余的天数不够下一次循环的情况,这个时候我们就需要加上一个判断,if,如果他要是剩下的天数不够,那么我们就直接再判断条件里加上剩余几天的总钱数,也就是n-i(剩余天数)*c(每天得到的钱数),再存到b里就可以输出了。

代码实现

#include<iostream> 
#include<cmath>
using namespace std; 
int main(){
	int n,c=1,b=0;
	cin>>n;
	for(int i=1;i<=n;i+=c){//循环
		b=b+c*c;//每次循环加上接下来连续几天会获得几枚金币。
		c=c+1;
		if(n-i<c){//判断剩余天数是否足够再来一次循环
			b+=(n-i)*c;//若要是不够则加上剩余几天的所有金币
		}
	}
	cout<<b;
	return 0;
}

解释一下,今天我写的博客没之前好了,其实这道题我也没理解太透彻,不知道再第一次做的时候有哪些困难进行解释,最近学业压力也比之前重了些许,打字也没之前流畅了,手有些僵硬,没写成咋样,大家将就着看吧。

标签:1.5,noi,收到,int,天数,45,金币,循环,骑士
From: https://www.cnblogs.com/scx20100214/p/16794611.html

相关文章