学会了一种简单的去重办法(C语言为例)
今天做了一道题,让把输入的一组随机数去重并且从小到大排序,输出结果为两行,第一行为去重后的个数,第二行为去重+排序后的所有数(从小到大,空格隔开)。
我首先选择了排序,运用了冒泡排序的方法。
for(i=0;i<n-1;i++) //冒泡排序 升序 { for(j=0;j<n-i-1;j++) { if(a[j+1]<a[j]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }
然后在去重的时候,我发现我不会。于是去CSDN上简单搜索了一下,发现所用的方法是比较难的(反正我看不懂,好像是类似于链、指针的),于是请教了男朋友。
他说可以把重复的删除。
我说我不会删除。。。
他又说:
我回:不懂
他耐心说:
好家伙,我终于懂了。
于是在我的认真研究下,终于做出了这道题!排完序后,我们用一个for循环来判断a[i]与a[i+1]是否重复,若重复,则让a[i]的值置为-1。同时由于本题要求统计去重后的个数,所以我加了一个数m,让他与去重前的个数n相等,发现一个重复的值,在设a[i]为-1的同时,让m--。
m=n; //m为去重后的个数 for(i=0;i<n;i++) //判断是否重复 重复的将第i个置为-1 { if(a[i]==a[i+1]) { a[i]=-1; m--; //个数-1 } }
最后先输出个数m,再判断a[i]的值是否为-1,如果不是-1,则输出。
printf("%d\n",m); //输出个数 for(i=0;i<n;i++) //输出去重后结果 { if(a[i]!=-1) //判断不等于-1的输出 printf("%d ",a[i]); }
最后结果如下: