酷代码 AI
菜单
服务商

C++ 实现正整数奇偶排序输出及代码错误修正

💡这段代码的主要思路是先读取 `n` 个正整数,然后对这些数进行排序,最后分别输出奇数和偶数。不过代码存在一个潜在问题,就是输入的数可能包含负数,而题目要求是正整数,虽然代码逻辑本身对于正整数是正确的,但如果输入负数可能不符合预期。 ### 代码问题分析 1. **边界情况处理**:没有对输入的数是否为正整数进行检查,如果输入负数,可能不符合题目要求。 2. **代码健壮性**:没有对输入的 `n` 进行范围检查,如果 `n` 超出数组 `a` 的大小(这里是 105),会导致数组越界。 ### 修正后的代码 ```cpp #include <iostream> #include <algorithm> using namespace std; const int MAXN = 105; int n, a[MAXN]; int main() { // 读取 n cin >> n; // 检查 n 是否在合理范围内 if (n <= 0 || n > MAXN) { cerr << "输入的 n 不在合理范围内。" << endl; return 1; } for (int i = 1; i <= n; i++) { cin >> a[i]; // 检查输入的数是否为正整数 if (a[i] <= 0) { cerr << "输入的数必须是正整数。" << endl; return 1; } } // 对数组进行排序 sort(a + 1, a + n + 1); // 输出一行奇数 bool firstOdd = true; for (int i = 1; i <= n; i++) { if (a[i] % 2 != 0) { if (!firstOdd) { cout << " "; } cout << a[i]; firstOdd = false; } } cout << endl; // 输出一行偶数 bool firstEven = true; for (int i = 1; i <= n; i++) { if (a[i] % 2 == 0) { if (!firstEven) { cout << " "; } cout << a[i]; firstEven = false; } } return 0; } ``` ### 代码解释 1. **输入检查**:在读取 `n` 后,检查 `n` 是否在合理范围内(1 到 105)。在读取每个数时,检查是否为正整数。 2. **排序**:使用 `sort` 函数对数组进行排序。 3. **输出奇数和偶数**:分别遍历数组,输出奇数和偶数,注意处理输出格式,避免多余的空格。 ######[AI问答 | 666点数解答 | 2026-05-16 19:40:19]

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