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]
- 使用位运算对黄金城原材料编号进行奇偶分类的C++程序(字节豆包 | 211点数解答 | 2026-02-28 20:38:57)116
- C++ 使用位运算判断材料编号奇偶性及代码修正(字节豆包 | 618点数解答 | 2026-07-25 20:29:18)36
- C++位运算判断整数奇偶性:原理、实现与最佳实践(DeepSeek | 791点数解答 | 2026-07-23 16:18:22)45
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)165
- 超详细!整数奇偶与倍数判断代码解析及补全(字节豆包 | 462点数解答 | 2026-01-08 12:43:56)132
- 整数奇偶性及倍数判断代码实现(字节豆包 | 405点数解答 | 2026-04-25 19:08:03)87
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)569
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)310
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)482
- 六种常用内部排序算法性能大比拼:基于 Python 的随机数据测试(字节豆包 | 2396点数解答 | 2024-12-21 21:45:53)259
- C 语言实现六种内部排序算法性能大比拼:含代码与注意要点(字节豆包 | 2078点数解答 | 2024-12-21 21:46:21)236
- C语言实现六种内部排序算法性能比较:附代码及改进建议(字节豆包 | 2009点数解答 | 2024-12-23 08:03:13)335