题目的主要信息:

  • 等差数列 2,5,8,11,14 。。。。
  • 输出求等差数列前nn项和

方法一:累加求和

具体做法:

既然是数列求和,我们就将前nn项都遍历出来,然后依次累加。这是一个首项为2,公差为3的等差数列,每项为2+3i2+3*i,其中ii从0开始。

alt

#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin >> n){
        int x = 2; //数组第一个元素
        int sum = 0;
        for(int i = 0; i < n; i++)  //遍历数组前n项
            sum += x + 3 * i; //累加
        cout << sum << endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),遍历数列前nn
  • 空间复杂度:(1)(1),常数级空间使用

方法二:求和公式

具体做法:

等差数列还有求和公式,Sn=nx1+n(n1)d/2S_n=n*x_1+n(n-1)d/2,其中x1=2x_1=2d=3d=3,我们可以根据公式直接计算和。

#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin >> n){
        int x = 2; //数组第一个元素
        int sum = n * x + n * (n - 1) * 3 / 2; //等差数列求和公式
        cout << sum << endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),直接计算,常数时间
  • 空间复杂度:O(1)O(1),常数级空间