PAT_A1140
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;
}