题解
计算累加和
1 条题解
-
0
P4224 计算累加和(基础)
解题思路
题目要求我们把"1 加到 n"这件事做成一个函数,就像做菜把步骤装进一个盒子,想用的时候喊一声就能用。
函数 sum(n) 做的事:准备一个"累加器" s,从 0 开始;用循环 i 从 1 数到 n,每数到一个 i 就把它加进 s;最后把 s 返回出去。
主程序只需要输入 x、y、z,然后分别调用 sum(x)、sum(y)、sum(z) 三次,三次结果各占一行输出。
举个例子,输入 5 10 15:
- sum(5) = 1+2+3+4+5 = 15
- sum(10) = 1+2+...+10 = 55
- sum(15) = 1+2+...+15 = 120
边界情况:题目保证 x、y、z 最小是 1,所以循环至少执行一次;最大是 1000,累加和最多 1000×1001÷2 = 500500,int 最大约 21 亿,完全装得下。另外也可以用等差数列公式 n×(n+1)÷2 快速算出,但题目特意要求"定义一个函数 sum(…)",所以我们用函数加循环来练手。
参考代码
// 用途:定义函数sum(n)求1到n的累加和,分别计算并输出1~x、1~y、1~z的和 #include <iostream> using namespace std; // 函数:返回 1+2+...+n 的和 int sum(int n) { int s = 0; for (int i = 1; i <= n; i++) s += i; // 循环从1累加到n return s; } int main() { int x, y, z; cin >> x >> y >> z; cout << sum(x) << endl; // 1到x的和 cout << sum(y) << endl; // 1到y的和 cout << sum(z) << endl; // 1到z的和 return 0; }复杂度分析
每次调用 sum(n) 都要循环 n 次,n 最大 1000,一次调用最多做 1000 次加法。总共调用 3 次,所以总时间复杂度是 O(x+y+z),也就是 O(n) 量级,在 1000 的范围内眨眼就算完。额外空间只用了几个变量和一个累加器,是 O(1)。
- 1