C语言。删去一维数组中所有相同的数,使之只剩一个。程序如下求改错。

如题所述

他这个是有错误的,222最后会变成22,只有再把他那个fun里的实现方法在复制一遍才可以消除。因为你看a[]={2,2,2,3};的话,a[0]==a[1]判断,成立,a[0]=a[1]依次赋值过去。可是再往后i已经变成2,再往后是a[2]==a[3]的判断,也就是2==3,显然不成立,所以保留了两个相邻的2。即结果等于a[]={2,2,3}.
解决方法是再次的复制这个for语句下,就OK了。
#include
<stdio.h>
#define
N
80
int
fun(int
a[],
int
n)
{int
i,k,s;
s=n;
for(i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
for(k=i;k<n;k++)
a[k]=a[k+1];
s--;
}
}
for(i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
for(k=i;k<n;k++)
a[k]=a[k+1];
s--;
}
}
return
s;
}
void
main()
{
int
a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The
original
data
:\n");
for(i=0;
i<n;
i++)
printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe
data
after
deleted
:\n");
for(i=0;i<20;i++)
printf("%3d",a[i]);
printf("\n%d\n",n);
}
温馨提示:答案为网友推荐,仅供参考
相似回答