/* Nhập vào mảng 1 chiều các số nguyên, hãy
tách các số đối xứng có trong mảng ra 1 mảng mới, tách
các số chẵn ra 1 mảng mới sau đó gộp 2 mảng lại để tạo ra
1 mảng mới theo quy tắc: Mảng đối xứng trước - mảng chẵn sau */
#include<stdio.h>
#include<conio.h>
#define MAX 100
void NhapMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("\nNhap vao phan tu a[%d] = ", i);
scanf_s("%d", &a[i]);
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
}
// nếu x đối xứng = > trả về 1, ngược lại trả về 0
int KiemTraDoiXung(int x)
{
int SoNghichDao = 0;
int themang = x;
while (themang != 0)
{
SoNghichDao = SoNghichDao * 10 + themang % 10;
themang /= 10;
}
if (SoNghichDao == x)
{
return 1;
}
return 0;
}
void TachMang(int a[], int n, int doixung[], int &ndoixung, int chan[], int &nchan)
{
ndoixung = nchan = 0;
for (int i = 0; i < n; i++)
{
if (KiemTraDoiXung(a[i]) == 1)
{
doixung[ndoixung] = a[i];
ndoixung++;
}
if (a[i] % 2 == 0)
{
chan[nchan] = a[i];
nchan++;
}
}
}
void GopMang(int doixung[], int ndoixung, int chan[], int nchan, int ketqua[], int &nketqua)
{
nketqua = 0;
// Xét mảng đối xứng trước
for (int i = 0; i < ndoixung; i++)
{
ketqua[nketqua] = doixung[i];
nketqua++;
}
// Xét mảng chẵn sau;
for (int i = 0; i < nchan; i++)
{
ketqua[nketqua] = chan[i];
nketqua++;
}
}
int main()
{
int n;
do
{
printf("\nNhap vao so luong phan tu cua mang: ");
scanf_s("%d", &n);
if (n < 0 || n > MAX)
{
printf("\nSo luong phan tu khong hop le. Xin kiem tra lai !");
}
} while (n < 0 || n > MAX);
int a[MAX];
NhapMang(a, n);
XuatMang(a, n);
int doixung[MAX], ndoixung, chan[MAX], nchan;
TachMang(a, n, doixung, ndoixung, chan, nchan);
printf("\nMang chua cac so doi xung: ");
XuatMang(doixung, ndoixung);
printf("\nMang chua cac so chan: ");
XuatMang(chan, nchan);
int ketqua[MAX], nketqua;
GopMang(doixung, ndoixung, chan, nchan, ketqua, nketqua);
printf("\nMang sau khi gop: ");
XuatMang(ketqua, nketqua);
_getch();
return 0;
}