C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学B组 第一场(2020.7.5) 试题 G: 解码 题目+题解

  大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客

本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!

博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客


在这里插入图片描述


试题 G: 解码

时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分

【问题描述】

小明有一串很长的英文字母,可能包含大写和小写。

在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表

达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。

例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、

aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表

达,小明不会将连续的超过 9 个相同的字符写成简写的形式。

现在给出简写后的字符串,请帮助小明还原成原来的串。

【输入格式】

输入一行包含一个字符串。

【输出格式】

输出一个字符串,表示还原后的串。

【样例输入】

H3el5o2

【样例输出】

HHHellllloo

【评测用例规模与约定】

对于所有评测用例,字符串由大小写英文字母和数字组成,长度不超过

100。

请注意原来的串长度可能超过 100。

试题G 题解

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main(){
    string a;
    getline(cin,a);
    int len = a.length();
    string re = "";
    bool flag = false;
    for(int i = 0 ; i < len;i++){
        if(a[i] < '2' || a[i] > '9'){
            re  = re + a[i];
            flag = true;
        } else{
            // 前一个为非2-9,且这次为2-9数字
            if(flag){
                int num = int(a[i] - '0') - 1;
                for (int j = 0; j < num; ++j) {
                    re = re + a[i-1];
                }
                flag = false;
            } else{
                re = re + a[i];
            }

        }
    }
    cout<<re;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43422111/article/details/107207633