题解 | #等差数列#
等差数列
http://www.nowcoder.com/practice/f792cb014ed0474fb8f53389e7d9c07f
题目的主要信息:
计算从2开始的3为公差的等差数列的前n项和。
方法一:数学公式计算
等差数列{an}的通项公式为:。 前n项和公式为: 或。本题中,,直接带入计算即可。
具体做法:
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)//输入项数n
{
int d=3;//公差
int a=2;//初始项
int sum=a*n+d*(n-1)*n/2;//数学公式计算
cout<<sum<<endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,直接计算,常数时间。
- 空间复杂度:,只用了常数空间。
方法二:累加计算
首先逐个计算出前n项的值,进行一个累加的操作,最后输出累加和。 具体做法:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,sum;
int d=3;
while(cin>>n)
{
sum=0;
vector<int> a(n,0);
for(int i=0;i<n;i++){
//计算第i项的值
if(i==0){
a[i]=2;
}else{
a[i]=a[i-1]+d;//公差为d
}
sum+=a[i];//累加
}
cout<<sum<<endl;//输出和
}
return 0;
}
复杂度分析:
- 时间复杂度:,for循环计算n项的值。
- 空间复杂度:,用a储存前n项值。