C语言编程,在一维数组中删去其中的偶数,让奇数紧缩排列并输出(只有一个数组)。
这是一个函数,返回值是数组长度,第二个循环有问题但是不知道怎么改,求指教~intremove(intbuff[],intcount){inti,j;for(i=0;i<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;
} 展开
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;
} 展开
3个回答
展开全部
#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),只需要从头到尾扫描一次就可以啦
追问
谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?
展开全部
另外给你写一个,用不着写那么复杂
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;
}
更多追问追答
追问
谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?
追答
像你那样写,错的原因有二,一是没有处理奇数的情况,二是处理后的元素没有移到一起。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
count-1改为count
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询