C语言编程问题,初学者,不太会,谢谢

编写一个函数,删去输入的一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。在主函数输入一个有序数组,接着调用该自定义函数,最后输出删除重复数据后的数组元素。
如:输入的数组元素为:9 9 9 8 6 6 0 0 0 -2 -2
打印的结果为:9 8 6 0 -2

编写一个函数,删去输入的一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。在主函数输入一个有序数组,接着调用该自定义函数,最后输出删除重复数据后的数组元素。如:输入的数组元素为:999866000-2-2打印的结果为:9860-2


这个程序的实现是比较简单的。因为数组中的数已按由小到大的顺序排列了。所以,只要找到与前一个数不相等的数,此数才是“有效”的。扫描完整个数组——就可以进行输出了:

#include<stdio.h>

int main()

{ int i,j,n=11,a[11]={9,9,9,8,6,6,0,0,0,-2,-2};

  for(i=j=1; j<n; j++)

  {while(a[j]==a[i-1])j++;

   a[i++]=a[j];

  }

  for(j=0;j<i-1;j++)

  printf("%d ",a[j]);

  return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-09

#include<stdio.h>

int sort(int *a,int n)

{

int j,i;

for(i=1,j=0;i<n;i++)

if(a[i]!=a[j])

a[++j]=a[i];

return j+1;

}

int main()

{

int n=0,a[100],num;

do{

scanf("%d",&a[n++]);

}while(getchar()!='\n');

num=sort(a,n);

for(int i=0;i<num;i++)

printf("%d ",a[i]);

printf("\n剩余%d个数\n",num);

return 0; 

}

相似回答