// 原数组:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
// 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
// 删除后:2 3 4 5 6 7 8 9 10 #include<stdio.h>
int f(int x[ ])
{
//从第二个元素开始往后走一边,看一下当前元素跟前面的重复不
//问题是:当我们处理了某个i的重复以后,他之后的元素整体向前挪了一位,可能导致挪之后的当前位仍是重复的,但是目前的程序里,已经进入下一次循环,i+1往后走了。
int flag;
for(int i=1;i<20;i++)
{
flag=0;
for(int j=0;j<i;j++)
{
if(x[j]==x[i])
{ flag=1;
//置1 表示确实在i前面有和他重复的数,flag=1表示,发生重复
}
}
if(flag==1)
{
//A是实现“后面整体往前挪一位”操作 for(int k=i;k<20;k++)
{
if(k==19) x[k]=0;
else x[k]=x[k+1];
}
}
}
int fan=0;
for(i=0;i<20;i++)
{
if(x[i]!=0) fan++;
printf("%d ",x[i]); }
//重复 ----
//不重复。 ----
return fan;
}
void main( )
{ int a[ ]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10};
//20个
printf("\n %d ",f(a));
}
/*编写程序,在被调函数中删去一维数组中所有相同的数,使之只剩一个,数组中的数已按由小到大的顺序排列,被调函数返回删除后数组中数据的个数。
例如:
原数组:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
删除后:2 3 4 5 6 7 8 9 10 返回数据个数:9
*/