【c语言】删去一个数组中所有相同的数,使之只剩一个,然后打印出此一维数组并且打印出数组个数

1.第一种:使用一维数组删除数组中相同的数

#include <stdio.h>
#define N 19
int fun(int a[],int n){
  int i,j=1;
    for(i=1;i<n;i++){
      if(a[j-1]!=a[i])
		a[j++]=a[i];
	}
     return j;
}
 void main(){

	int a[N]={2,2,2,3,4,4,8,9,5,6,6,6,6,7,7,9,10,10,10},i,n=19;
        printf("The original data:\n");
	   for(i=0;i<n;i++){
	    	printf("%d ",a[i]);
	   }
	   n=fun(a,n);
	   printf("\n The data after delelted:\n");
	   for(i=0;i<n;i++){
	     printf("%d ",a[i]);

	   }
       printf("\n");
}

以上方法其实只是把数组中相同的元素放在数组的后半部分了,输出时只输出前半部分,前半部分的数是唯一的。

这个方法只是把数组的数前后移动了一下而已。

2.第二种方法:把这一个数组转移到另一个数组中,在转移过程中如果有相同的就不插入

#include <stdio.h>
int fun(int a[],int b[],int N);
#define N 19

void main(){
	int a[N]={2,2,2,3,4,4,8,9,5,6,6,6,6,7,7,9,10,10,10};
	int b[N];
	int i,n;
	 n=fun(a,b,N);
     printf("\n The data after delelted:\n");
	   for(i=0;i<n;i++){
	     printf("%d ",b[i]);

	   }
	 printf("\n");
	 printf("%d\n",n);//删除后,数组中元素的个数
}
int fun(int a[],int b[],int n){
   int i,j=0;
   b[j]=a[0];
   for(i=0;i<n;i++){
	   if(b[j]==a[i]){
	   continue;
	   }
	   j++;
	   b[j]=a[i];
   }
   j++;
   return j;
}

以上方法通过两个数组,实现数组元素的转移,删除了数组中相同的元素。

发布了52 篇原创文章 · 获赞 69 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lbqlzch/article/details/86213482