Đề bài
Cho hai mảng, chúng ta cần kết hợp hai mảng sao cho mảng kết hợp có các phần tử luân phiên của mảng đầu tiên và mảng thứ hai. Nếu một trong các mảng có phần tử thừa, thì các phần tử này nên được nối vào cuối mảng kết hợp.
arr1[] = {10, 20, 30, 40} arr2[] = {-10, -20, -30, -40} result[] = {10, -10, 20, -20, 30, -30, 40, -40}
Thuật toán
1. Duyệt cả hai mảng và lần lượt đưa phần tử vào mảng kết quả. 2. Nếu một trong hai mảng hết thì đưa các phần tử còn lại của mảng kia vào mảng kết quả.
Ví dụ
#include <iostream> #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) using namespace std; void alternateMergedArray(int *arr1, int n1, int *arr2, int n2,int *result){ int i, j, k; i = 0; j = 0; k = 0; while (i < n1 && j < n2) { result[k] = arr1[i]; ++k; ++i; result[k] = arr2[j]; ++k; ++j; } while (i < n1) { result[k] = arr1[i]; ++k; ++i; } while (j < n2) { result[k] = arr2[j]; ++k; ++j; } } void displayArray(int *arr, int n){ for (int i = 0; i < n; ++i) { cout << arr[i] << " "; } cout << endl; } int main(){ int arr1[] = {10, 20, 30, 40}; int arr2[] = {-10, -20, -30, -40}; int result[SIZE(arr1) + SIZE(arr2)]; cout << "First array: " << endl; displayArray(arr1, SIZE(arr1)); cout << "Second array: " << endl; displayArray(arr2, SIZE(arr2)); cout << "Result array: " << endl; alternateMergedArray(arr1, SIZE(arr1), arr2, SIZE(arr2),result); displayArray(result, SIZE(result)); return 0; }
Kết quả
Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau:
First array: 10 20 30 40 Second array: -10 -20 -30 -40 Result array: 10 -10 20 -20 30 -30 40 -40