首页 > 其他 > 详细

SDUT 2352 Run Length Encoding

时间:2014-02-22 22:58:49      阅读:408      评论:0      收藏:0      [点我收藏+]

点我看题目 

题意 :将给定的字符串编码,编码的规则根据两条,1.如果字符串里有连续相等的字符,就变为两个字符,一个是这些连续相同的字符的个数,另一个是这个字符,但是如果数量超过了9个,那就输出9再输出这个字符,剩下的重新按照规则进行,例如AAAA,就输出4A,AAAAAAAAAAA输出9A2A,2.如果字符串里有连续不相等的字符,就将这些字符原样输出并且在前后各加一个1,如果字符串里有刚好有个1,就将这个1变为11,AAAABCCC输出4A1B13C,123444输出11123134,1111111111输出911111。

思路 :就是一道顶麻烦的题,如果不好好读题的话,就很难办,因为有很多细节问题都需要注意,比如说输入空格也算字符,输入换行也要处理。最后一组样例是10个1,按照编码规则先输出9个1,还剩一个1就要根据规则2进行编码,因为是1个1所以要在前后各加一个1,又因为是一个单独的1,所以要把1变成11

bubuko.com,布布扣
bubuko.com,布布扣
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>

const int maxn = 424567 ;
char sh[maxn] ;
char ch[maxn] ;

using namespace std;

int main()
{
    while(gets(sh))
    {
        int x = 0,j ;
        int len = strlen(sh) ;
        //   printf("%d",len);
        for(int i = 0 ; i < len ; )
        {
            j = i + 1;
            if(sh[i] == sh[j])
            {
                while(sh[i] == sh[j])
                {
                    j++ ;
                    if(j - i >= 9)
                        break ;
                }
                ch[x++] = j-i+0 ;
                ch[x++] = sh[i] ;
                i += (j-i) ;
            }
            else
            {
                while((sh[j] != sh[j+1] && j+1 < len) || j == len-1)
                    j++ ;
                ch[x++] = 1 ;
                for(int ii = i ; ii < j ; ii++)
                {
                    ch[x++] = sh[ii] ;
                    if(sh[ii] == 1 )
                        ch[x++] = 1 ;
                    //if(j == 0 && sh[j] != sh[j+1])
                    //ch[x++] = ‘1‘ ;
                }
                ch[x++] = 1 ;
                i += (j-i) ;
            }
        }
        ch[x] = \0 ;
        printf("%s\n",ch) ;
    }
    return 0;
}
View Code
bubuko.com,布布扣

SDUT 2352 Run Length Encoding

原文:http://www.cnblogs.com/luyingfeng/p/3560782.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!