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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:18:13