题解 | #等差数列#

等差数列

http://www.nowcoder.com/practice/f792cb014ed0474fb8f53389e7d9c07f

题目的主要信息:

计算从2开始的3为公差的等差数列的前n项和。

方法一:数学公式计算

等差数列{an}的通项公式为:an=a1+(n1)da_n=a_1+(n-1) * d。 前n项和公式为:Sn=na1+n(n1)d/2S_n=n*a_1+n(n-1)d / 2 Sn=n(a1+an)/2S_n=n(a_1+a_n)/2。本题中a1=2a_1=2d=3d=3,直接带入计算即可。

具体做法:

#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;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),直接计算,常数时间。
  • 空间复杂度:O(1)O(1),只用了常数空间。

方法二:累加计算

首先逐个计算出前n项的值,进行一个累加的操作,最后输出累加和。 alt 具体做法:

#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;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),for循环计算n项的值。
  • 空间复杂度:O(n)O(n),用a储存前n项值。
全部评论

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务