学会了一种简单的去重办法(C语言为例)

树上的一只小菜鸟1年前get一个新knowledge1456

    今天做了一道题,让把输入的一组随机数去重并且从小到大排序,输出结果为两行,第一行为去重后的个数,第二行为去重+排序后的所有数(从小到大,空格隔开)。

    我首先选择了排序,运用了冒泡排序的方法。

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上简单搜索了一下,发现所用的方法是比较难的(反正我看不懂,好像是类似于链、指针的),于是请教了男朋友

image.png

他说可以把重复的删除。

image.png

我说我不会删除。。。

image.png

他又说:

image.png

我回:不懂

image.png

他耐心说:

image.png

好家伙,我终于懂了。

于是在我的认真研究下,终于做出了这道题!排完序后,我们用一个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]);
}

最后结果如下:

image.png

image.png

相关文章

欢迎在宝塔面板安装Z-BlogPHP!

管理员账号:admin管理员密码:zblogger 请安装成功后登入后台更改初始化的密码为安全密码!...

学会了拆分的应用

学会了拆分的应用

前几天做了一道题,要求如下:将 1, 2, ……,9共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1 : 2...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。