C语言编程,在一维数组中删去其中的偶数,让奇数紧缩排列并输出(只有一个数组)。

这是一个函数,返回值是数组长度,第二个循环有问题但是不知道怎么改,求指教~

int remove(int buff[],int count)
{
int i,j;
for(i=0;i<count;i++)
{
if((buff[i])%2==0)
{
for(j=i;j<count-1;j++)
buff[j]=buff[j+1];
i--;
}
count--;
}
return count;
}

#include <stdio.h>

int Remove(int a[], int len);
void print_arr(int a[], int n);

int main(void)
{
int a[] = {1, 2, 3, 4, 5};
int l;

if (l = Remove(a, 5))
print_arr(a, l);
return 0;
}

int Remove(int a[], int len)
{
int i, j;
i
for (i = 0, j = 0; i < len; ++i)
if (a[i] % 2)
a[j++] = a[i];
return j;
}

void print_arr(int a[], int n)
{
int i;

for (i = 0; i < n; ++i)
printf("%d ", a[i]);
}

这样更快啊,O(n),只需要从头到尾扫描一次就可以啦

追问

谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-05
另外给你写一个,用不着写那么复杂

int remove(int buff[],int count)
{
int i,j;
for(i=0,j=0;i<count;i++)
if(buff[i]%2!=0)
buff[j++]=buff[i];
return j;
}追问

谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?

追答

像你那样写,错的原因有二,一是没有处理奇数的情况,二是处理后的元素没有移到一起。

追问

谢谢

本回答被提问者采纳
第2个回答  2014-12-13
count-1改为count

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网