#include<stdio.h>
int del(int a[],int n);
int del(int a[],int n)
{
int i,j,k,t,m,b[20],q=0,c[20],s,p,original=0;
for(i=0;i<n;i++) //将a数组的值赋给c数组并进行主元排序,使各元素从小到大排列
c[i]=a[i];
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(c[i]>c[j])
{
t=c[i];
c[i]=c[j];
c[j]=t;
}
}
}
m=1; //找到c数组中出现次数最多的元素(可以有多个),并储存在b数组中
k=1;
for(i=1;i<n;i++)
{
if(c[i]!=c[i-1])
{
if(k>m)
{
m=k;
t=c[i-1];
for(p=0;p<=q;p++)
b[p]=t;
}
else if((k==m)&&(k!=1))
{
q++;
t=c[i-1];
b[q]=t;
}
k=1;
}
else
k++;
}
if(k>m)
{
m=k;
t=c[i-1];
for(p=0;p<=q;p++)
b[p]=t;
}
else if((k==m)&&(k!=1))
{
q++;
t=c[i-1];
b[q]=t;
}
for(s=0;s<=q;s++)
printf("%d ",b[s]);
printf("\n");
for(i=0;i<n;) //对a数组中的元素进行删除,凡是和b数组中元素有一样的都删除,注意缩进时的各种情况的判断
{
original=0;
if(i!=n-1)
for(s=0;s<=q;s++)
{
if(b[s]==a[i])
{
for(j=i+1;j<n;j++)
a[j-1]=a[j];
n--;
original=1;
break;
}
}
else
{
for(s=0;s<=q;s++)
if(b[s]==a[i])
n--;
}
if(original)
i--;
i++;
}
return n;
}
int main(void) //调用函数,输入数据,并输出相应结果
{
int a[20],n,i,k;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
k=del(a,n);
for(i=0;i<k;i++)
printf("%d ",a[i]);
return 0;
}
C语言--删除数组中重复出现次数最多的元素(重复元素不仅限一个)
最新推荐文章于 2022-05-13 11:41:42 发布