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

如何用C++实现按2个A数组元素+1个B数组元素填充目标数组?

如何修改C++代码实现按规则合并两个数组?

嘿,我来帮你搞定这个数组合并的问题!先明确需求,再梳理原代码的问题,最后给出完整的修改方案:

需求回顾

我们需要按照每2个数组A的元素后跟随1个数组B的元素的规则合并两个数组:

  • 测试用例:
    • 数组A:[10,15,7,19,6,24,12,2,18]
    • 数组B:[13,21,5,3,14,9,17]
    • 预期结果:[10,15,13,7,19,21,6,24,5,12,2,3,18,14,9,17]

原代码的问题

你的代码目前只完成了数组的输入初始化,还存在几个关键问题:

  1. 读取数组B时循环条件错误:用了i < m(数组A的长度),应该是i < n(数组B的长度),否则会导致数组越界
  2. 使用了非标准的变长数组(VLAs):int a[m]这种写法在C++标准中是不被支持的,仅部分编译器扩展支持,可移植性差
  3. 完全没有实现核心的合并逻辑,也没有输出结果

修改后的完整代码

#include <iostream>
#include <vector> // 使用vector替代变长数组,符合C++标准
using namespace std;

int main() {
    int m, n;
    cout << "please enter size of array A (M): ";
    cin >> m;
    cout << "please enter size of array B (N): ";
    cin >> n;

    // 用vector存储数组A和B,避免非标准的变长数组
    vector<int> a(m);
    for (int i = 0; i < m; ++i) {
        cout << "enter element " << i << " of array A: ";
        cin >> a[i];
    }

    vector<int> b(n);
    // 修正循环条件:遍历数组B的所有元素
    for (int i = 0; i < n; ++i) {
        cout << "enter element " << i << " of array B: ";
        cin >> b[i];
    }

    // 结果数组,用vector自动管理内存
    vector<int> c;
    int idx_a = 0, idx_b = 0;

    // 核心合并逻辑:按规则交替取元素
    while (idx_a < m || idx_b < n) {
        // 先取最多2个数组A的元素(如果还有剩余)
        for (int count = 0; count < 2 && idx_a < m; ++count) {
            c.push_back(a[idx_a++]);
        }
        // 再取1个数组B的元素(如果还有剩余)
        if (idx_b < n) {
            c.push_back(b[idx_b++]);
        }
    }

    // 打印结果数组
    cout << "\nResult array: [";
    for (size_t i = 0; i < c.size(); ++i) {
        if (i > 0) cout << ", ";
        cout << c[i];
    }
    cout << "]" << endl;

    return 0;
}

关键修改说明

  • 替换变长数组为vector:vector是C++标准容器,自动管理内存,避免了变长数组的兼容性问题
  • 修正数组B的循环条件:确保遍历数组B的所有元素,不会出现越界或遗漏
  • 实现核心合并逻辑:
    • 用两个索引idx_a和idx_b分别跟踪A、B数组的当前位置
    • 每次循环先取最多2个A的元素,再取1个B的元素,直到两个数组都遍历完毕
    • 自动处理边界情况:比如A剩余元素不足2个时,取完剩余的A元素;B已经遍历完时,直接追加剩余的A元素
  • 添加结果输出:新增了结果数组的打印功能,方便验证输出是否符合预期

测试验证

输入你提供的测试用例:

  • 数组A长度9,元素依次为10,15,7,19,6,24,12,2,18
  • 数组B长度7,元素依次为13,21,5,3,14,9,17
    运行代码后会输出你预期的结果数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:35