Yêu cầu:
– Viết chương trình tách 1 mảng các số nguyên thành 2 mảng B và C, sao cho mảng B chứa toàn số lẻ và mảng C chứa toàn số chẵn.
Ví dụ: Mảng ban đầu: 1 3 8 2 7 5 9 0 10
Mảng a: 1 3 7 5 9
Mảng b: 8 2 0 10
Thuật toán:
– Khai báo 2 mảng để chứa phần tử chẵn và lẻ.
– Duyệt mảng ban đầu để tách phần tử chẵn và lẻ vào 2 mảng tương ứng.
Code:
/************************************************************
#include "stdio.h"
#include "conio.h"
#define MAX_SIZE 100
void split_arr(int A[], int n, int B[], int* m, int C[], int *k);
void print_arr(int A[], int n, char name_arr);
void main()
{
int A[] = {1, -8, 2, 2, 3, 5, 23, 13, 44};
int n = sizeof(A)/sizeof(int);
int m = 0,k = 0;
int B[MAX_SIZE];
int C[MAX_SIZE];
split_arr(A, n, B, &m, C, &k);
print_arr(A, n, 'A');
print_arr(B, m, 'B');
print_arr(C, k, 'C');
getch();
}
void split_arr(int A[], int n, int B[], int* m, int C[], int *k)
{
int i, j;
for(i = 0; i < n; i++)
{
if(A[i]%2 != 0) // odd number
{
B[(*m)++] = A[i];
}
else //even number
{
C[(*k)++] = A[i];
}
}
}
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 18 19 20 |
A[0] = 1 A[1] = -8 A[2] = 2 A[3] = 2 A[4] = 3 A[5] = 5 A[6] = 23 A[7] = 13 A[8] = 44 B[0] = 1 B[1] = 3 B[2] = 5 B[3] = 23 B[4] = 13 C[0] = -8 C[1] = 2 C[2] = 2 C[3] = 44 |
1. Hàm tách mảng thành ba mảng : một mảng chứa toàn số chẵn, một mảng chứa toán số lẻ, một mảng chứa toàn số 0.
2. Tách mảng thành ba mảng Một mảng chứa các số hoàn thiện, một mảng chứa các số đối xứng và một mảng chứa các số không phải các số trên.
3. Tách mảng thành ba mảng: Một mảng chứa các số âm, một mảng chứa các số dương và một mảng chứa các số không.
anh cho em xin công thức tách 1 mảng thành 3 mảng đc k?