You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解序列最小奇数与最大偶数:代码未过在线判题,及输入输出疑问

问题解答:输入5 2 4 2 5 4的正确输出是5 4

这个输入里存在奇数5,所以最小奇数就是5;最大偶数是4,所以最终输出是5 4。

接下来分析你的代码问题,以及对应的修正方案:

你的代码存在的几个关键问题:

  • 初始化逻辑错误:
    • 你把max初始化为0,但如果所有偶数都是负数(比如输入3 -2 -4 -6),max永远不会被更新,最后会错误输出-1,而正确的最大偶数应该是-2。
    • min初始用了INT16_MAX,但没有包含对应的头文件(<climits>或<cstdint>),可能导致未定义行为;同时判断min是否未找到的逻辑完全多余:if (min == INT16_MAX && min != 1),只要min还是初始值,就说明没有找到奇数,直接设为-1即可。
  • freopen的误用:在线判题系统(OJ)不需要手动指定输入输出文件,直接用cin和cout即可,freopen会干扰OJ的输入输出流,导致无法正确读取测试用例。
  • 变量命名风险:min和max是C++标准库中的函数(来自<algorithm>),虽然你没包含这个头文件,但用它们做变量名是不好的习惯,容易引发潜在冲突。

修正后的代码:

#include <iostream>
#include <climits>  // 必须包含此头文件才能使用INT_MIN和INT_MAX
using namespace std;

int main() {
    int n, a;
    int min_odd = INT_MAX;  // 换变量名避免和标准库函数冲突
    int max_even = INT_MIN;
    
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a % 2 == 0) {
            if (a > max_even) {  // 找到更大的偶数就更新
                max_even = a;
            }
        } else {
            if (a < min_odd) {  // 找到更小的奇数就更新
                min_odd = a;
            }
        }
    }
    
    // 处理不存在对应数字的情况
    if (min_odd == INT_MAX) {
        min_odd = -1;
    }
    if (max_even == INT_MIN) {
        max_even = -1;
    }
    
    cout << min_odd << " " << max_even << endl;
    return 0;
}

修正说明:

  1. 把min和max换成min_odd和max_even,彻底避免命名冲突。
  2. 初始化min_odd为INT_MAX(表示初始无奇数),max_even为INT_MIN(表示初始无偶数),覆盖了所有整数范围的边界情况。
  3. 移除了freopen,适配OJ的默认输入输出方式。
  4. 拆分了偶数和奇数的判断逻辑,代码更清晰易读。
  5. 补充了<climits>头文件,确保INT_MAX和INT_MIN能正确编译使用。

这样修改后,你的代码就能正确处理所有测试用例,包括全奇数、全偶数、包含负数的极端场景了。

内容的提问来源于stack exchange,提问作者v_head

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:05:30