| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 708 人关注过本帖
标题:这个的思路是什么啊???
只看楼主 加入收藏
ark1994218
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-5-12
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:2 
这个的思路是什么啊???
行程编码压缩算法

Time Limit: 3000ms, Memory Limit: 10000KB                , Accepted: 0, Total Submissions: 0

Description

RLE(Run Length Encoding行程编码)算法是一个简单高效的无损数据压缩算法,其基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据快采用的压缩策略是用一个字节(我们称之为数据重数属性)表示数据块重复的次数,然后在这个数据重数属性字节后面存储对应的数据字节本身,例如某一个文件中有如下的数据序列AAAAA,在未压缩之前占用5个字节,而如果使用了压缩之后就变成了5A,只占用两个字节,对于连续不重复的数据序列,表示方法和连续的重复数据块序列的表示方法一样,只不过前面的数据重数属性字节的内容为1。一般的这里的数据块取一个字节,这篇文章中数据块都默认为一个字节。
具体来讲,字符串的编码规则如下:
在字符串中,2~9个相同的字符组成的子字符串用2个字符来编码表示。第1个字符是这一字符串的长度,为2~9。第2个字符是相同字符的值。如果一个字符串存在相同字符且多于9个的子串,就先对前9个字符进行编码,然后对其余相同字符组成的子串采用相同方法进行编码。例如AAAAAABCCCC编码为6A1B14C。
在字符串中,如果存在某个子串,其中没有一个字符连续重复出现,就表示为以字符1开始,后面跟着这一子串,再以字符1结束。如果在字符串中存在只有1个字符1出现的子串,则以两个字符1作为输出,例如12344编码为11123124。

Input

输入一个字符串。

Output

输出RLE编码后的字符串。

Sample Input

AAAAAABCCCC12344


Sample Output

6A1B14C11123124



现在我想请问这句话“在字符串中,如果存在某个子串,其中没有一个字符连续重复出现,就表示为以字符1开始,后面跟着这一子串,再以字符1结束。如果在字符串中存在只有1个字符1出现的子串,则以两个字符1作为输出,例如12344编码为11123124。”
中的11123124怎么确定???

这是我编的
#include<stdio.h>
int Rle_Encode_N(unsigned char *inbuf, int inSize, unsigned char *outbuf, int onuBufSize)
{
    unsigned char *src = inbuf;
    int i;
    int encSize = 0;
    while(src < (inbuf + inSize))
    {
        if((encSize + 2) > onuBufSize)
        {
            return -1;
        }
        unsigned char value = *src++;
        i = 1;
        while((*src == value) && (i < 255))
        {
            src++;
            i++;
        }
        outbuf[encSize++] = i+48;
        outbuf[encSize++] = value;
    }

    return encSize;
}
int main()
{
char a[100]={'\0'},b[100]={'\0'};
int n1,i,n;
gets(a);
n1=strlen(a);
n=Rle_Encode_N(a,n1,b,2*n1);
puts(b);
return 0;
}

但运行结果出错,帮帮我吧
搜索更多相关主题的帖子: Memory 
2013-06-09 23:38
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:10 
例如12344编码为11123124。”由于123只出现一次,所以有11231两边都有1,前一个表示次数,后一个表示结尾,4出现两次24,综合就是1123124

Maybe
2013-06-11 08:48
q1025518438
Rank: 2
等 级:论坛游民
帖 子:6
专家分:46
注 册:2013-6-11
收藏
得分:10 
我觉得可以建立一个数组,先遍历数组,如果遇上1,就将数组中1后面的全部后移一位,再将空出的位置填上1,如果全不重复,再将数组从不重复的那一位后移1位,给前面空出的位置填上1,再给最后填上1,。
2013-06-11 12:50
快速回复:这个的思路是什么啊???
数据加载中...
 
   



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

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