神题,改一处错误,运行结果没有重复的元素。求助大神,麻烦做出来后说一下原因,谢谢!

 // 原数组: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

*/

if(flag==1)   

{

//A是实现“后面整体往前挪一位”操作

    for(int k=i;k<20;k++)

    {

         if(k==19) x[k]=0;

         else x[k]=x[k+1];

    }

    i--;//修改: 这里添加这一句

}