题解
等差数列求和
1 条题解
-
0
解题思路
等差数列就是后一项减前一项的差都相等的数列。这道题的数列从 2 开始,比如差值是 3 时,数列是:2、5、8、11、14……
题目要求写函数 sum(d, n):已知首项是 2、差值是 d,求前 n 项的和。
怎么求前 n 项的和呢?我们可以一项一项地“长”出来:
- 先记第一项 term = 2,总和 s = 0;
- 做 n 次循环:每次把当前项 term 加进总和 s,然后让 term 加上差值 d,得到下一项;
- 循环结束后 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