酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现绝对值求和与奇数降序排列的解题思路

我来为你分别解答这两道题目,并给出完整的 C++ 代码实现。 --- # 📗 P3688 绝对值之和 ## 🧠 问题分析 - 输入 `n` 个整数,对每个数取绝对值后求和 - 约束:`n ≤ 1000`,数值在 int 范围内 ## 💻 完整C++代码 ```cpp #include <iostream> #include <cstdlib> // 包含 abs() 函数 using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 0; i < n; i++) { int num; cin >> num; sum += abs(num); // 累加绝对值 } cout << sum << endl; return 0; } ``` ## 🔍 关键点说明 - **`abs()` 函数**:用于计算整数的绝对值,定义在 `<cstdlib>` 头文件中 - **时间复杂度**:**O(n)**,只需遍历一次 - **空间复杂度**:**O(1)**,只用一个累加变量 - **注意**:`abs()` 对 `int` 类型有效,如果你用的是 `long long`,应该用 `llabs()` --- # 📙 P3687 奇数的顺序 ## 🧠 问题分析 - 输入 `n` 个正整数,找出其中**所有奇数** - 将这些奇数**从大到小排序**输出 - 约束:`n ≤ 1000` ## 💻 完整C++代码 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> oddNumbers; for (int i = 0; i < n; i++) { int num; cin >> num; if (num % 2 != 0) { // 判断奇数 oddNumbers.push_back(num); } } // 从大到小排序 sort(oddNumbers.begin(), oddNumbers.end(), greater<int>()); // 输出结果 for (int i = 0; i < oddNumbers.size(); i++) { cout << oddNumbers[i]; if (i < oddNumbers.size() - 1) cout << " "; } cout << endl; return 0; } ``` ## 🔍 关键点说明 - **奇数判断**:`num % 2 != 0`(正整数判断奇偶,这是最标准的方式) - **降序排序**:使用 `sort()` 函数配合 `greater<int>()` 实现从大到小排列 - **边界情况**:如果没有奇数,则输出空行(代码中 `oddNumbers` 为空,循环不执行,直接输出换行) - **时间复杂度**:**O(n log n)**,主要开销在排序 - **空间复杂度**:**O(n)**,需要存储奇数 --- ## 📊 时间复杂度与空间复杂度对比 | 题目 | 时间复杂度 | 空间复杂度 | |------|------------|------------| | P3688 绝对值之和 | O(n) | O(1) | | P3687 奇数的顺序 | O(n log n) | O(n) | --- ## 💡 开发建议 1. **P3688**: - 直接使用 `abs()` 是最高效、最安全的方式,不要自己写条件判断 - 如果数据范围大,建议使用 `long long` 类型存储 `sum`,但本题 `n ≤ 1000`,`int` 足够了 2. **P3687**: - 先收集奇数再排序,比遍历时边排序边插入更清晰 - `greater<int>()` 需要包含 `<functional>` 头文件,但通常 `<algorithm>` 已经间接包含它 3. **通用建议**: - 所有题目都注意**输出格式**(空格、换行) - 可以加上 `ios::sync_with_stdio(false); cin.tie(0);` 提高 IO 速度,但本题数据量小,影响不大 4. **常见陷阱**: - P3687 题目要求**空格隔开**,记得最后一个数字后面**不能有空格** - P3688 题目**不要求**输出换行,但建议加上 `endl` 更严谨 ######[AI写代码神器 | 978点数解答 | 2026-08-27 17:47:08]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]