编写函数,删除数组中所有的重复元素,使数组变成一个集合,函数返回集合中元素的个数。
书上习题
#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
*/测试用例
运行结果
如果按常规方法,应该是每次发现相同的字符,后面所有的字符都需前移,按这种删除数据的快速算法,每次只需有一个字符前移。
可对照该图删除空格的思路进行理解。