top1编程
← 返回题目
题解

奇数之和

1 条题解

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

    P4413 奇数之和(基础)

    解题思路

    题目要求每对整数m、n之间所有奇数的和(包含m和n),并且要求把计算过程写成一个函数 sum(m,n)。写函数的好处是把"求奇数和的活"打包起来,主程序想用几次就调用几次。函数里用一个累加器s,从m循环到n(注意是 i<=n,要包含n),遇到奇数 i%21 就加进s,最后把s返回。主程序用for循环读3对m、n,每次读进来就调用sum(m,n)输出结果,代码很简洁。边界情况:题目保证m<n,所以循环不会倒着走;如果m或n本身就是奇数,比如m=9,循环从9开始,9%21,所以9会被累加进去,符合"包括m和n"的要求。如果区间里一个奇数都没有(比如m=2、n=2),s保持0,也能正确输出。

    参考代码

    // 程序用途:用函数sum计算m到n之间(含两端)所有奇数之和,共处理3对数据
    #include <iostream>
    using namespace std;
    
    // 函数sum:返回m到n之间所有奇数的和
    int sum(int m, int n) {
        int s = 0;                      // 累加器
        for (int i = m; i <= n; i++) {
            if (i % 2 == 1) s += i;     // 是奇数就累加
        }
        return s;
    }
    
    int main() {
        for (int k = 0; k < 3; k++) {   // 共3对整数
            int m, n;
            cin >> m >> n;
            cout << sum(m, n) << endl;  // 调用函数并输出结果
        }
        return 0;
    }
    

    复杂度分析

    每调用一次sum,就要从m循环到n,循环次数约等于 n-m+1,所以单次调用的时间复杂度是 O(n-m);主程序调用3次,总的复杂度还是 O(n-m) 的量级。额外空间只用了几个变量,是 O(1)。

    • 1