HJ100 题解 | #等差数列#

题意分析

  • 给出一个等差数列的首项和公差,我们需要求解前n项的和。

思路分析

直接模拟

  • 我们直接按照题目的意思进行模拟,从1-n循环,然后用一个变量更新每一项,累加到答案即可。

  • 代码如下

    • 从1-n进行枚举,时间复杂度为O(n)O(n)
    • 过程中只使用了少数几个变量,空间复杂度为O(1)O(1)
#include<bits/stdc++.h>

using namespace std;

int main(){
    int n;
    while(cin>>n){
        int now=2; // now记录当前项的数
        int sum=0; // sum记录总的和
        while(n--){
            sum+=now;
            now+=3;
        }
        cout<<sum<<endl;
    }
    return 0;
}

公式法

  • 我们利用高中的知识可以推导到公式法进行求解,由于这个序列是一个等差序列,所以我们可以利用很好地推导前n项和的通项公式。

alt

  • 代码如下
    • 直接利用公式法,时间复杂度为O(1)O(1)
    • 只用了几个变量,空间复杂度为O(1)O(1)
#include<bits/stdc++.h>

using namespace std;

int main(){
    int n;
    while(cin>>n){
        // 直接利用公式法
        int ans=n*2+3*(n-1)*n/2;
        cout<<ans<<endl;
    }
    return 0;
}