求大佬解释一下这是怎么把重复的元素去掉的,小白没看懂?

求大佬解释一下这是怎么把重复的元素去掉的

#include <stdio.h>
void main()
{
    int i,j,k,a[]={4,78,20,30,19,0,30,20,8,7,3,1,90,86,437,918,0,1},ln;
    for(ln=sizeof(a)/sizeof(int),k=i=1;i<ln;i++)
    {
        for(j=0;j<k;j++)//
            if(a[j]==a[i]) break;//
                if(j>=k)         //
            {a[k]=a[i];k++;}    //
    }
    for(i=0;i<k;printf("%d ",a[i++]));
    printf("\n");
}


2个回答

这程序写得有点怪,实际上ln是数组的长度
k保存的是去掉重复的数,也就是a的开头。
两重循环,外侧循环遍历a里面所有的数,下标是i
内循环j从0遍历到k,看a[j]是否在a[i]里面出现,如果没有出现,放在a[k]的位置上。
最后遍历输出。

看下面的一个简单例子:
对 a[] = {3,7,1,3,1,6,8}去重:
首先k=1,因为a[0]=3,前面没有数字,所以3肯定是找到的第一个不重复的数
之后在a[0]~a[k-1],也就是a[0]里面找,没找到7。说明7也是一个新找到的数字,此时a[1]=7,k=2
之后遇到1,也是类似,此时a[2]=1,k=3
关键来了,下面在a[0]-a[2]范围内找,找到了3,说明3是重复的,所以k不变,继续循环
下面又找到1,继续循环
下面遇到6,还是在a[0]-a[2]范围内找,没找到6,说明6也是新发现的数字,所以a[k]也就是a[2]=6,k=3
下面遇到8,在a[0]-a[3]范围内找,没找到8,说明8也是新发现的数字,所以a[k]也就是a[3]=8,k=4
最后数组{3,7,6,8,1,6,8},k=4
输出a的0~3下标3 7 6 8就是a数组去掉重复之后的结果

谢谢大佬,我应该懂了,就是从第二个数开始依次和前面的数比对,如果没有重复的数就用a [k]记录下来,有的话就不记录,最后再输出数组的前k 个元素

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 是的,如果问题解决,请给我一个采纳,谢谢
大约一个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
求大佬教!简单的GridView显示sql的问题!小白!
1
各位大佬们,angularjs里面如何动态的改变指令的元素啊,比如点击事件
2
python新手小白,求大佬们帮忙,关于python处理字符串去除中文的问题
1
小白求个大佬帮我看一下?不管怎么测试结果都是ling
1
使用latex生成的文件打不开,显示如下图,求大佬帮解决一下
1
求个大佬帮忙解释一下这个链接是怎么构成的怎么做的,想做个相似的
0
在devcpp运行不能重复输出并集求求大佬们看看。
1
python 统计重复行 大佬求解决
3
如何把打印“成功”“完成”这几个字显示在前台,小白求大佬帮帮看一下???
2
大佬帮忙看一下这个递归子函数表达的算法,实在是看不懂,谢谢!
1
小白,字符指针内存分配的问题,希望大佬帮忙解答一下
1
redis创建集群失败,求各位大牛,大佬们路过看看,帮助小白解决一下,跪谢
1
Unity3d有什么办法看Hierarchy里隐藏的某些组件,求大佬帮助
1
求大佬看看 ,springboot框架下整了一个数据库的增加修改删除的小东西,然后报了实例化什么的这个错
1
请问论坛大佬解释一下printf输出long double 类型的值时输出错误的原因。
3
小白指针问题,求大佬解释
1
求大佬帮助一下,安装hyperledger fabric的时候遇到的问题
1
index查索引值总报错,求大佬们帮忙看看
3
Linux下的mysql 启动问题,求大佬帮忙看看。