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;
}
展开
 我来答
BD_ABEL
2014-12-13 · TA获得超过383个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:334万
展开全部
#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),只需要从头到尾扫描一次就可以啦

追问
谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?
ylcqucc
推荐于2016-09-05 · TA获得超过1436个赞
知道小有建树答主
回答量:862
采纳率:0%
帮助的人:338万
展开全部
另外给你写一个,用不着写那么复杂

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;
}
更多追问追答
追问
谢谢!可是我想知道我原先的程序错在哪里,为什么那样写输出的数还是原来数组的数?
追答
像你那样写,错的原因有二,一是没有处理奇数的情况,二是处理后的元素没有移到一起。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
道不可名
2014-12-13
知道答主
回答量:11
采纳率:100%
帮助的人:8.1万
展开全部
count-1改为count
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式