zoukankan      html  css  js  c++  java
  • SDUT 2352 Run Length Encoding

    点我看题目 

    题意 :将给定的字符串编码,编码的规则根据两条,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

    #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] = '' ;
            printf("%s
    ",ch) ;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    2012搜狗校园招聘笔试题(2)
    T-SQL中只截取日期的日期部分和日期的时间部分
    Delphi XE4 TStringHelper用法详解
    TScreen 类
    TScreen 类
    Delphi中Form的position属性与代码自定义窗体位置
    如何让窗口显示在电脑屏幕中间
    C#中整型数据类型
    C# WinForm开发系列
    SQL中EXCEPT和Not in的区别?
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3560782.html
Copyright © 2011-2022 走看看