top1编程
← 返回题目
题解

计算累加和

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    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