C++新手求助:将数组元素按先奇数后偶数合并为单个数组
C++数组奇偶元素合并解决方案
问题
我是一名C初学者,需要实现向数组中输入数字后,将数组元素按先奇数后偶数的顺序合并为一个数组。目前已成功将奇数和偶数分别存入两个独立数组,但不知道如何将它们合并回单个数组,希望用基础C知识实现,不要使用高级函数。以下是我的代码:
#include <iostream> using namespace std; int main() { int N{ 0 }, vector[100], even[100], odd[100], unify[100], i{ 0 }, j{ 0 }, k{ 0 }; cout << "Add the dimension: " << endl; cin >> N; cout << "Add the elements: " << endl; for (int i = 0; i < N; i++) { cout << "v[" << i << "]=" << endl; cin >> vector[i]; } for (i = 0; i < N; i++) { if (vector[i] % 2 == 0) { even[j] = vector[i]; j++; } else if (vector[i] % 2 != 0) { odd[k] = vector[i]; k++; } } cout << "even elements are :" << endl; for (i = 0; i < j; i++) { cout << " " << even[i] << " "; cout << endl; } cout << "Odd elements are :" << endl; for (i = 0; i < k; i++) { cout << " " << odd[i] << " "; cout << endl; } return 0; }
解决方案
你已经完成了奇偶分离的核心步骤,只需添加简单的循环就能将两个数组合并为unify数组,具体实现如下:
修改后的完整代码
#include <iostream> using namespace std; int main() { int N{ 0 }, vector[100], even[100], odd[100], unify[100], i{ 0 }, j{ 0 }, k{ 0 }; cout << "输入数组长度:" << endl; cin >> N; cout << "输入数组元素:" << endl; for (int i = 0; i < N; i++) { cout << "v[" << i << "]=" << endl; cin >> vector[i]; } for (i = 0; i < N; i++) { if (vector[i] % 2 == 0) { even[j] = vector[i]; j++; } else { odd[k] = vector[i]; k++; } } cout << "偶数元素:" << endl; for (i = 0; i < j; i++) { cout << " " << even[i] << " "; cout << endl; } cout << "奇数元素:" << endl; for (i = 0; i < k; i++) { cout << " " << odd[i] << " "; cout << endl; } // 合并奇数和偶数到unify数组 int m = 0; // 先存入所有奇数 for (; m < k; m++) { unify[m] = odd[m]; } // 再存入所有偶数,接在奇数后面 for (int n = 0; n < j; n++) { unify[m + n] = even[n]; } // 输出合并后的数组 cout << "合并后的数组(先奇数后偶数):" << endl; for (int p = 0; p < k + j; p++) { cout << " " << unify[p] << " "; } cout << endl; return 0; }
关键逻辑说明
- 用变量
m记录奇数在unify数组中的存储位置,遍历odd数组完成奇数的存入 - 接着从
m的位置开始,遍历even数组将偶数存入unify数组,确保偶数接在奇数序列之后 - 合并后的数组总长度为奇数个数
k加上偶数个数j,遍历输出时以此作为循环终止条件
内容的提问来源于stack exchange,提问作者Silviu Stroe
相关产品推荐
相关产品推荐

