题解
奇数之和
1 条题解
-
0
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