Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รวมอาร์เรย์สองชุดแล้วแยกหลักเก็บในอาร์เรย์ใหม่ใน C++

บทนำ

โจทย์: บวกอาร์เรย์สองชุดตามตำแหน่ง (index) เดียวกัน หากผลบวกมีหลักมากกว่า 1 ให้แยกหลักแต่ละหลักเก็บในอาร์เรย์ผลลัพธ์

ตัวอย่าง

arr_one = {1, 2, 32, 4, 5}
arr_two = {1, 52, 3}
ผลลัพธ์: 2 5 4 3 5 4 5

คำนวณ: index 0: 1+1=2 → [2] index 1: 2+52=54 → [5,4] index 2: 32+3=35 → [3,5] index 3: 4 (เหลือ arr_one) → [4] index 4: 5 (เหลือ arr_one) → [5]

ขั้นตอนการแก้ปัญหา

  1. ใช้ vector เก็บผลลัพธ์ (ขนาดไม่แน่นอน)
  2. วนลูปบวกตำแหน่งที่ตรงกันจนหมดอาร์เรย์สั้นกว่า
  3. แยกหลักของผลบวกด้วยฟังก์ชัน Recursive (pushDigits)
  4. ต่อท้ายสมาชิกที่เหลือของอาร์เรย์ยาวกว่า

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

void pushDigits(int num, vector<int> &result) {
    if (num > 0) {
        pushDigits(num / 10, result);
        result.push_back(num % 10);
    }
}

void printVector(vector<int> &result) {
    for (int i : result) {
        cout << i << " ";
    }
    cout << endl;
}

void addTwoArrayElements(vector<int> arr_one, vector<int> arr_two) {
    vector<int> result;
    int arr_one_length = arr_one.size(), arr_two_length = arr_two.size();
    int i = 0;
    while (i < arr_one_length && i < arr_two_length) {
        pushDigits(arr_one[i] + arr_two[i], result);
        i++;
    }
    while (i < arr_one_length) {
        pushDigits(arr_one[i++], result);
    }
    while (i < arr_two_length) {
        pushDigits(arr_two[i++], result);
    }
    printVector(result);
}

int main() {
    vector<int> arr_one = {1, 2, 32, 4, 5};
    vector<int> arr_two = {1, 52, 3};
    addTwoArrayElements(arr_one, arr_two);
    return 0;
}

ผลลัพธ์

2 5 4 3 5 4 5

สรุป

เทคนิค Recursive แยกหลัก (Divide by 10, Mod 10) ใช้ได้ทั่วไป สังเกตว่าต้องแยกจากหลักสูงสุดไปต่ำสุด จึง Recursive ก่อนแล้วค่อย push_back