测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
B53

案例:奇数和与累计相加

引入

章前总览 求和题先找“每一项的通项”,再用 s = s + 一项 循环累加。有时还能发现更妙的公式(如奇数和 = n²)。

两道案例:

  • 1+3+5+…+(2n−1)
  • 1+(1+2)+(1+2+3)+… 累计相加

1 案例1:求 1+3+5+…+(2n−1)

输入 n,输出前 n 个正奇数之和。样例:100 → 10000。

</> 参考代码

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int i = 1, s = 0;
    for (; i <= n; i++)  // 表达式1可省略,分号不能省
        s = s + (2 * i - 1);
    cout << s << endl;
    return 0;
}
  • 通项:第 i 项 = 2*i-1
  • 循环外还要用的变量(如 s)必须在循环前定义。
  • 其实答案就是 n*n(等差数列求和 / 方格直观解释)。

2 案例2:累计相加

求 1 + (1+2) + (1+2+3) + … + (1+…+n)。样例:3→10,4→20,10→220。

两种算法

  • 按出现次数:数字 i 出现 (n+1−i) 次 → sm += i*(n-i+1)
  • 按组求和:第 i 组之和 = i(i+1)/2 → sm += (i+1)*i/2

</> 参考代码(方法1)

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int sm = 0;
    for (int i = 1; i <= n; i++)
        sm += i * (n - i + 1);
    cout << sm << endl;
    return 0;
}
小结

累加模板:

s = 0;
for (i = 1; i <= n; i++)
    s += 第i项;
里程碑达成:

下一节学习取整、四舍五入,并用循环处理 n 个数。