蓝桥杯每日一练之序列求和

227 阅读2分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战

💛作者主页:静Yu

🧡简介:CSDN全栈优质创作者、华为云享专家、前端知识交流社区创建者

💛社区地址:bbs.csdn.net/forums/Jing…

第十三届蓝桥杯大赛个人赛省赛比赛将于2022年4月9日(星期六)举办,趁现在寒假的时间抓紧时间备战一下。因为博主本人报名是C/C++组,所以更新所有内容都是C/C++相关知识。题目全部都是蓝桥杯官网题库真题。今天是备战刷题的第十三天。

题目:

求1+2+3+...+n的值。

输入格式:

输入包括一个整数n。

输出格式:

输出一行,包括一个整数,表示1+2+3+...+n的值。

样例输入:

4 样例输出: 10 样例输入: 100 样例输出: 5050

说明:

请注意这里的数据规模。

本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。

本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果错误。

如果你使用C++或C语言而且准备使用printf输出结果,则你的格式字符串应该写成%I64d以输出long long类型的整数。

解题思路:

这个题目也是非常简单的,只需求1-n的和,有两种解题思想。可以(1+n)*n/2,也可以直接利用for循环进行求和计算。先定义一个sum,一定要给sum赋初值为0.不然编译的时候不会报错,但是在运行的时候是会报错的。注意看一下题目最后的说明,我们直接使用for循环的话有一定的缺陷,会导致运行超时。利用公式计算时比较好的选择,还需要注意的一点就是整数的类型,可以定义为long long类型的整数。不过最后提交的代码结果都是正确的。

image.png

完整代码:

//暴力解法
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
int main()
{
long long int n;
	cin>>n;
	long long int sum=0;
	for(int i=1;i<=n;i++)
	{
	sum=sum+i;
	
	}
cout<<sum<<endl;
return 0;
}

//公式计算
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
int main()
{
long long int n;
	cin>>n;
	long long int sum=0;
sum=(1+n)*n/2;
cout<<sum<<endl;
return 0;
}

image.png