c语言中怎样将数组中的所有相同的数都删除

如题所述

可以先排个序,然后相邻元素比较,相同的就通过后边的向前移动来去掉, 最后参用链数的数组这个插入删除方便且时间少。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-15
#include <stdio.h>
int main()
{
int i,j;
int a[]={1,2,2,5,3,6,7,8,5,0};

printf("The before delete:\n");
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
}
printf("\n\n");

for(i=0;i<10;i++)
{
for(j=1;j<10;j++)
{
if(a[j]==a[i])
{
a[j]=a[j+1]; /*删除重复的数字*/
}
}
a[j]=-1;/*将重复的数字标志为-1*/
}
printf("The delete later:\n");
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
}
getch();
}
希望对你有帮助!
第2个回答  2012-04-15
#include <stdio.h>
#include <malloc.h>
int main()
{
int n,*p,*q,i,del,del_n=0,j,k,n_n;
printf("请输入数组大小>1\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
q=(int *)malloc(sizeof(int)*n);
printf("\n请输入%d个数字",n);
n_n=n;
printf("\n");
for(i=0;i<n;i++){scanf("%d",p+i);*(q+i)=1;}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(*(p+i)==*(p+j))
*(q+i)=*(q+j)=0;
}
}
printf("\n原输入数据为:");
for(i=0;i<n;i++)
{
printf("%3d",*(p+i));
}
printf("\n");
int same,count=0;
for(i=0;i<n;i++)
{
if(*(q+i)==0)
{ same=*(p+i);
break;
}
}
for(i=0;i<n;i++)
{
if(*(q+i)==0)
{
*(p+i)=same;
count++;
}
}
if(count!=0)
{
for(i=0;i<n;i++)
{ if(*(p+i)==same)
{
for(j=i+1;j<n;j++)
{
*(p+j-1)=*(p+j);
}
i=i-1;
n--;
}
}
}
p=(int *)realloc(p,sizeof(int)*(n_n-count));
printf("\n删除重复数字后的数据为:");
for(i=0;i<n;i++)
printf("%4d",*(p+i));
}
相似回答