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

C++ 奇偶数分离排序输出实现及边界测试要点

根据您的描述,这是一个 **C++** 编程题目,要求将输入的 n 个正整数分成奇数和偶数两组,并分别按从小到大排序输出。 下面给出一个**完整、清晰且符合题目要求**的 C++ 代码,并附带详细解释。 ## 📝 完整代码实现 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; // 输入数字个数 vector<int> odd, even; // 分别存储奇数和偶数 for (int i = 0; i < n; i++) { int x; cin >> x; if (x % 2 == 0) { even.push_back(x); // 偶数 } else { odd.push_back(x); // 奇数 } } // 分别从小到大排序 sort(odd.begin(), odd.end()); sort(even.begin(), even.end()); // 输出奇数(若存在) for (int i = 0; i < odd.size(); i++) { if (i > 0) cout << ' '; cout << odd[i]; } cout << endl; // 换行 // 输出偶数(若存在) for (int i = 0; i < even.size(); i++) { if (i > 0) cout << ' '; cout << even[i]; } cout << endl; return 0; } ``` --- ## 🔍 代码详细解释 | 部分 | 说明 | |------|------| | `#include <vector>` | 使用动态数组存储数据,方便后续排序和遍历 | | `#include <algorithm>` | 提供 `sort()` 函数 | | `x % 2 == 0` | 判断偶数;否则为奇数 | | `sort(odd.begin(), odd.end());` | 将奇数容器从小到大排序(默认升序) | | 输出循环中的 `if (i > 0) cout << ' ';` | 控制数字间用空格分隔,且行末无多余空格 | --- ## 💡 重点注意事项 ### 1️⃣ 边界处理 - **输入 n 可能为 0**(虽然题目通常给出 n>=1,但最好考虑);如果是 0,程序会正常输出两个空行,符合逻辑。 - **奇数和偶数可能某一类为空**:代码不会输出空行内容,只输出一个换行,依然符合格式要求。 ### 2️⃣ 内存与效率 - 使用 `vector` 动态扩展,适合 n <= 100 的小规模数据,空间复杂度 O(n)。 - 排序使用 `sort()`,平均时间复杂度 O(n log n),完全满足 n=100 的规模。 ### 3️⃣ 输出格式细节 - 要求每行数字之间用**空格**分隔,行尾**不能有多余空格**。上述代码通过在数字前加空格的方式实现(首个数字前不加)。 - 奇数和偶数各占一行,即使某行为空,也输出一个空行(因为第一行奇数输出后立刻 `cout << endl;`)。 --- ## 🔧 测试样例验证 **输入:** ``` 5 9 5 10 7 2 ``` **运行过程:** - 奇数:9,5,7 → 排序后:5 7 9 - 偶数:10,2 → 排序后:2 10 **输出:** ``` 5 7 9 2 10 ``` --- ## 🧩 扩展思路(可选) 如果题目允许**不区分奇偶顺序**,也可以一次性排序后按奇偶筛选输出,但当前方法是**最清晰直观**的。若要求更高效率,可用计数排序,但考虑到 n<=100,普通 `sort` 已足够高效。 --- ## 📚 建议 - **熟悉 STL 容器**(如 vector, sort)是 C++ 常用技能,务必掌握。 - **留意输出格式**:这类题目常因多余空格或缺少换行导致判题错误。 - 建议在本地编译运行,测试几组边界数据(如全奇数、全偶数、n=1)确保稳定。 ######[AI写代码神器 | 934点数解答 | 2026-08-15 15:31:18]

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