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
Leave a Reply
You must be logged in to post a comment.