编写函数,删除数组中所有的重复元素,使数组变成一个集合,函数返回集合中元素的个数。
书上习题
#include<stdio.h>
int set(int a[],int n)
{
int i,j,k;
for(i=0;i<n;++i)//每次以a[i]为比较标准
{
j=i+1;
k=i+1;
while(j<=9)
{
if(a[j]==a[i])
{
j++;
n--;//每次删除(前移)数组的长度(n)减1
}
else
{
a[k]=a[j];
k++;
j++;
}
}
}
return n;
}
int main()
{
int a[10];
int i;
for(i=0;i<10;++i)
{
scanf("%d",&a[i]);
}
set(a,10);
int m=set(a,10);
for(i=0;i<m;++i)
{
printf("%d ",a[i]);
}
printf("\n");
printf("%d",m);
return 0;
}
/*
33 4 4 3 5 3 22 5 6 8
*/测试用例
运行结果
如果按常规方法,应该是每次发现相同的字符,后面所有的字符都需前移,按这种删除数据的快速算法,每次只需有一个字符前移。
可对照该图删除空格的思路进行理解。