#include<stdio.h>
#include<conio.h>
//Khai báo nguyên hàm
void Nhapmang(int a[],int n);
void Xuatmang(int a[],int n);
void Xoa(int a[],int &n);
void Sapxeptangdan(int a[],int n);
int DemPhanBiet(int a[],int n);
void Nhapmang(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("\na[%d]: ",i);
scanf("%d",&a[i]);
}
}
void Xuatmang(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%2d",a[i]);
}
}
//Xóa các phần tử giống nhau để mãng chỉ gồm những phần tử phân biệt
void Xoa(int a[],int &n)
{
for(int i=0;i<n;i++)
{
int j=i+1;
while(j<n)
{
if(a[i]==a[j])
{
for(int k=j;k<n;k++)
{
a[k]=a[k+1];
}
n--;
}
else
{
j++;
}
}
}
}
void Sapxeptangdan(int a[],int n)
{
int temp;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
int DemPhanBiet(int a[],int n)
{
Sapxeptangdan(a,n); //Gọi lại hàm sắp xếp tăng dần.
int dem1=0,dem2=0;
for(int i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
dem1++;
}
}
for(int i=0;i<n;i++)
{
if(a[i]==a[i+1] && a[i+1]!=a[i+2])
{
dem2++;
}
}
return n-(dem1+dem2);
}
void main()
{
int a[100];
int n=10;
//==============Nhập xuất=============//
Nhapmang(a,n);
printf("\nMang vua nhap la: ");
Xuatmang(a,n);
//=====Đếm các phần tử phân biệt====//
printf("\nSo phan tu phan biet: %d",DemPhanBiet(a,n));
//====Xóa các phần tử giống nhau=====//
Xoa(a,n);
printf("\nMang sau khi xoa cac phan tu giong nhau la: ");
Xuatmang(a,n);
/*
//=====Đếm các phần tử phân biệt====//
printf("\nSo phan tu phan biet: %d",DemPhanBiet(a,n));
*/
getch();
}
Cho em hỏi là sao khi đưa hàm đếm DemPhanBiet(int a[],int n) lên trên hàm Xoa(int a[],int n). Thì kết quả ra đúng, Còn ngược lạ kết quả sẽ ra số lượng phần tử còn lại sau khi đã xóa các phần tử giống nhau.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?