这是一个函数,返回值是数组长度,第二个循环有问题但是不知道怎么改,求指教~
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]);
}
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;
}追问
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