Nối 2 mảng số nguyên

Yêu cầu:

– Cho 2 mảng số nguyên a và b kích thước lần lượt là n và m. Viết chương trình nối 2 mảng trên thành mảng c theo nguyên tắc chẵn ở đầu mảng và lẻ ở cuối mảng.

Ví dụ: Mảng a: 3 2 7 5 9
Mảng b: 1 8 10 4 12 6
Mảng c: 6 12 4 10 2 8 3 1 7 5 9

Thuật toán:

 

Code:

/************************************************************
* Author: VNCODING
* History 
* 2014/10/31 first create VNCODING
*************************************************************/
#include <stdio.h>
#include <conio.h>
#define MAX_SIZE 100

#define MAX(a,b) (((a)>(b))?(a):(b))

void merge_arr(int A[], int n, int B[], int m, int C[], int *l);
void print_arr(int A[], int n, char name_arr);

void main()
{
    int A[] = {1, -8, 2, 2, 3, 5, 23, 13, 44};
    int B[] = {2, 5, 4, 0, -6, 11, 34, 8};
    int n = sizeof(A)/sizeof(int);
    int m = sizeof(B)/sizeof(int);
    int C[MAX_SIZE];
    int l;

    merge_arr(A, n, B, m, C, &l);

    print_arr(C, l, 'C');

    getch();
}

void merge_arr(int A[], int n, int B[], int m, int C[], int *l)
{
    int i, j = 0, k = m + n - 1;
    for(i = 0; i < MAX(n, m); i++)
    {
        if(A[i]%2 == 0 && i < n)
            C[j++] = A[i];
        if(B[i]%2 == 0 && i < m)
            C[j++] = B[i];
        if(A[i]%2 != 0 && i < n)
            C[k--] = A[i];
        if(B[i]%2 != 0 && i < m)
            C[k--] = B[i]; 
    }
    *l = (m + n);
}
void print_arr(int A[], int n, char name_arr)
{
    int i;
    if(n == 0)
    {
        printf("\nArray %c is empty", name_arr);
        return;
    }
    for(i = 0;i < n;i++)
    {
        switch(name_arr)
        {
        case 'A':
        case 'a':
            printf("\nA[%d] = %d", i, A[i]);
            break;
        case 'B':
        case 'b':
            printf("\nB[%d] = %d", i, A[i]);
            break;
        case 'C':
        case 'c':
            printf("\nC[%d] = %d", i, A[i]);
        }
    }
}

Kết quả:

C[0] = 2
C[1] = -8
C[2] = 2
C[3] = 4
C[4] = 2
C[5] = 0
C[6] = -6
C[7] = 34
C[8] = 8
C[9] = 44
C[10] = 13
C[11] = 23
C[12] = 11
C[13] = 5
C[14] = 3
C[15] = 5
C[16] = 1

Be the first to comment

Leave a Reply