1. 题目背景与需求解析
2025年9月电子学会中小学生软件编程C++等级考试一级真题中出现的"奇偶数对"题目,是考察初学者对基础语法和逻辑判断能力的一道典型题目。这类题目通常要求考生能够:
- 理解奇偶数的数学定义
- 掌握C++中基本的输入输出操作
- 熟练使用条件判断语句
- 正确处理数值范围边界情况
题目通常会给出一个正整数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 数学优化方法
更高效的解法是利用数学性质进行优化:
- 奇数可以表示为2k+1
- 偶数可以表示为2k
- 奇数+偶数=奇数
- 所以当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;
