C++奇偶数对算法解析与优化实践

1. 题目背景与需求解析

2025年9月电子学会中小学生软件编程C++等级考试一级真题中出现的"奇偶数对"题目,是考察初学者对基础语法和逻辑判断能力的一道典型题目。这类题目通常要求考生能够:

  1. 理解奇偶数的数学定义
  2. 掌握C++中基本的输入输出操作
  3. 熟练使用条件判断语句
  4. 正确处理数值范围边界情况

题目通常会给出一个正整数n,要求找出所有满足a + b = n(其中a < b)的奇偶数对组合。例如当n=7时,有效的奇偶数对有(1,6)、(3,4)、(5,2)等,需要根据题目具体要求筛选符合条件的组合。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 核心算法设计思路

2.1 暴力枚举法

最直观的解法是使用双重循环枚举所有可能的数对:

cpp复制for(int a = 1; a < n; a++) {
    for(int b = a + 1; b <= n; b++) {
        if(a + b == n && (a % 2 != b % 2)) {
            // 输出符合条件的数对
        }
    }
}

这种方法时间复杂度为O(n²),对于一级考试范围内的n值(通常n≤100)完全够用。

2.2 数学优化方法

更高效的解法是利用数学性质进行优化:

  1. 奇数可以表示为2k+1
  2. 偶数可以表示为2k
  3. 奇数+偶数=奇数
  4. 所以当n为奇数时才存在解

优化后的算法:

cpp复制if(n % 2 == 1) {
    for(int a = 1; a <= n/2; a += 2) {
        cout << a << " " << n - a << endl;
    }
    for(int a = 2; a <= n/2; a += 2) {
        cout << a << " " << n - a << endl;
    }
}

这种方法将时间复杂度降到了O(n),大大提高了效率。

3. 完整代码实现与解析

3.1 基础版本实现

cpp复制#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    

内容推荐

已经到底了哦
已经到底了哦