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:
/************************************************************
#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ả:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |
Leave a Reply