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 个数。