| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:C语言的算法问题,想了好久也没有做出来新书求罩啊
只看楼主 加入收藏
Maps
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2015-3-8
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
C语言的算法问题,想了好久也没有做出来新书求罩啊
有数组int data[nSize],其中隐藏着若干个0,其余都是非0整数。
写一个函数int Func(int *data, int nSize),使data数组中,所有的0都移动到数组的后面,非0整数移动数组的前面并保持原来的顺序,返回值为原数据中第一个元素为0的下标。
要求:尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路。
例如,数组中的数组为“15, 27, 0, 35, 9, 0, 22, 17”,则经过Func函数的处理后,其中的数据应变为“15, 27, 35, 9, 22, 17, 0, 0”,Func函数的返回值为6(从0开始编号)。

请大神说一下思路也行  有代码那就更加感激不尽了;
先谢谢了
搜索更多相关主题的帖子: C语言 空间 元素 
2015-05-10 11:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
返回值为原数据中第一个元素为0的下标。 怎么是6呢

DO IT YOURSELF !
2015-05-10 12:08
Maps
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2015-3-8
收藏
得分:0 
回复 2楼 wp231957
就是返回移动过后第一个0的下标

看到了编程大海的一角,我还在努力的寻找方向,
2015-05-10 12:15
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:17 
这个算法不需要绞尽脑汁吧,就是一个排除0的算法,和我以前给出的排除空格的算法是一样的,easy!
程序代码:
#include<stdio.h>
#define nsize 8
int filterzero(int *p,int l)
{
    int i,j;
    for(i=0,j=0;i<l;i++)
    {
        p[j]=p[i];
        if(p[i])j++;
    }
    for(i=j;i<l;i++)p[i]=0;
    return j;
}
void main()
{
    int i,data[]={15,27,0,35,9,0,22,17};
    for(i=0;i<nsize;i++)printf("%d ",data[i]);
    printf("\n");
    i=filterzero(data,nsize);
    printf("no zero:%d\n",i);
    for(i=0;i<nsize;i++)printf("%d ",data[i]);
    printf("\n");
}


 

能编个毛线衣吗?
2015-05-10 14:49
Maps
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2015-3-8
收藏
得分:0 
回复 4楼 wmf2014
666666代码我收下了
果然大神一个 if语句就把它给解决了!  膜拜啊,我写的不仅麻烦还有还不全面。。前进的路还很长。

看到了编程大海的一角,我还在努力的寻找方向,
2015-05-10 15:26
快速回复:C语言的算法问题,想了好久也没有做出来新书求罩啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047337 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved