| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1230 人关注过本帖
标题:哪位大哥能帮我看看这个问题出在哪呢....程序总是执行到一半就结束了...
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那要看需求中的“压缩”是什么意思了

授人以渔,不授人以鱼。
2012-07-25 13:54
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
其实我很疑惑的是,为啥开始要用a申请一块堆空间复制数组c里的内容?题目要求?

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-25 13:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用LShang在2012-7-25 13:59:43的发言:

其实我很疑惑的是,为啥开始要用a申请一块堆空间复制数组c里的内容?题目要求?

因为他初始化的数组在栈上,是无法压缩的,所以要先把数据过渡到堆上。这正是这个题目要求古怪的地方。

授人以渔,不授人以鱼。
2012-07-25 14:02
moonboylst
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-7-23
收藏
得分:0 
回复 10楼 LShang
额....调试了下...确实是的...到头来还是我自己粗心的结果. 谢谢大哥哈~
2012-07-25 14:03
moonboylst
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-7-23
收藏
得分:0 
   问题已经解决啦,谢谢2位大哥的耐心指点哈~ !
2012-07-25 14:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你有时间回头审视一下这个解决方案有什么问题没有

授人以渔,不授人以鱼。
2012-07-25 14:16
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
以下是引用TonyDeng在2012-7-25 14:02:46的发言:


因为他初始化的数组在栈上,是无法压缩的,所以要先把数据过渡到堆上。这正是这个题目要求古怪的地方。

直接从数组c判断是否非0,计数,然后再申请空间,重新遍历一次数组c,非0数据复制到动态空间里,这样也算压缩的吧?
不过这样会有两次对c的遍历,T版有啥好思路没?

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-25 14:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有更好的思路,宁愿扫描两趟也比不断更改动态内存的尺寸强。

授人以渔,不授人以鱼。
2012-07-25 14:30
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:0 
帮你改了一下,感觉你想复杂了,你不知道你压缩了之后有啥意义!
看一下我改的符合你的要求不!
#include<stdio.h>
#include<stdlib.h>
void main()
{
    int *a,b[13]={0,0,0,0,0,0,0,0,0,0,0,0,0},c[13]={65,0,95,0,0,79,82,0,84,94,86,90,0};
    int i=0,j=0,k;
    a=(int *)malloc(13*sizeof(int));
    if(a!=NULL)
    {
        printf("yes\n");
    }
    for(i=0;i<13;i++)
    {
        a[i]=c[i];
    }
   
    for(i=0,k=0;i<13;i++)
    {
        if(a[i]!=0)
        {
            b[k]=a[i];
            k++;
        }
        else if(a[i]==0)
        {
            continue;
        }
    }
    for(k=0;k<13;k++)
    {
        if(b[k]!=0)
        {
            printf("%3d",b[k]);
            j++;
        }
    }
    printf("%\n");
    free(a);
    a=(int *)malloc(j*sizeof(int));
    for(i=0;i<j;i++)
    {
        *(a+i)=b[i];
    }
    for(i=0;i<j;i++)
    {
        printf("%3d",a[i]);
    }
    free(a);
    a=0;
}
2012-07-25 14:45
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:0 
回复 17楼 LShang
我觉得可以定义一个动态数组,这样就不会浪费空间,而且也只需要遍历一次,但这样加大了代码量。
2012-07-25 14:49
快速回复:哪位大哥能帮我看看这个问题出在哪呢....程序总是执行到一半就结束了. ...
数据加载中...
 
   



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

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