PAT甲级1140.

目录

A1140

题目

样例

输入:

1 8

输出:

1123123111

思路和坑点

  思路:
  需要理解题目的意思,后一串字符是对前一串字符的解读,例子如下:

1
11                          //上一行的1有1个
12                          //上一行的1有2个
1121                        //上一行的1有1个,2有1个
122111                      //上一行的1有两个,2有1个,1有一个
112213                      //上一行的1有一个,2有两个,1有三个
以此类推

  所以只要会统计每一个连续的字符个数,重新组成新的字符串,然后迭代即可。

AC代码

#include<bits/stdc++.h>
using namespace std; 
void readans(string &s);
string to_str(int n);
int main(){    
#ifdef ONLINE_JUDGE    
#else    
    freopen("1.txt", "r", stdin);    
#endif    
    string s;
    int n;
    cin>>s>>n;
    for(int i=0;i<n-1;i++)
        readans(s);
    cout<<s;
    return 0;    
}
void readans(string &s){            //通过传进来的字符串获取下一串字符串的长度
    string temp="";
    char pre=s[0];                  //从第一个开始处理
    int cnt=1;                      //计数器
    for(int i=1;i<s.size();i++){
        if(s[i]==pre)    cnt++;     //如果是相同字符,累加个数
        else{
            temp.push_back(pre);    //如果和前边不同,则处理连续的数字
            temp+=to_str(cnt);      //加入字符和字符个数
            cnt=1;                  //重置计数器
        }
        pre=s[i];                   //更新pre
    }
    temp.push_back(pre);            //处理最后一段
    temp+=to_str(cnt);
    s=temp;                         //更细s为新的一串字符
}
string to_str(int n){               //整数转为字符串
    string ret="";
    while(n){
        ret.push_back('0'+n%10);
        n/=10;
    }
    return ret;
}