top1编程
← 返回题目
题解

等差数列求和

1 条题解

  • 0
    @ 2026-8-5 16:07:42

    解题思路

    等差数列就是后一项减前一项的差都相等的数列。这道题的数列从 2 开始,比如差值是 3 时,数列是:2、5、8、11、14……

    题目要求写函数 sum(d, n):已知首项是 2、差值是 d,求前 n 项的和。

    怎么求前 n 项的和呢?我们可以一项一项地“长”出来:

    1. 先记第一项 term = 2,总和 s = 0;
    2. 做 n 次循环:每次把当前项 term 加进总和 s,然后让 term 加上差值 d,得到下一项;
    3. 循环结束后 s 就是前 n 项的和。

    验证样例 4 5(首项 2,差值 4,求前 5 项和):

    • 第一项 2:s = 2
    • 第二项 2 + 4 = 6:s = 8
    • 第三项 6 + 4 = 10:s = 18
    • 第四项 10 + 4 = 14:s = 32
    • 第五项 14 + 4 = 18:s = 50
    • 答案是 50,和样例一致。

    题目要求“利用 sum 函数求出”,所以求和的代码要放在 sum 函数里。

    参考代码

    // P4596 等差数列求和:首项为 2、差值为 d 的等差数列,求前 n 项和
    #include <iostream>
    using namespace std;
    
    // 用 sum 函数求首项为 2、差值为 d 的等差数列前 n 项和
    int sum(int d, int n) {
        int s = 0, term = 2;           // s 是总和,term 是当前项,首项为 2
        for (int i = 1; i <= n; i++) {
            s += term;                 // 把当前项累加进总和
            term += d;                 // 下一项 = 当前项 + 差值 d
        }
        return s;
    }
    
    int main() {
        int d, n;
        cin >> d >> n;                 // 输入差值和项数
        cout << sum(d, n) << endl;
        return 0;
    }
    

    复杂度分析

    项数 n 最大是 100,sum 函数只循环 n 次,时间大约是 O(n)。即使 n 取到最大也只是 100 次循环,非常快。只用两个变量,空间是 O(1)。

    • 1