题目描述
有一份神奇的电报,如下:
13
1113
3113
132113
1113122113
....
小张经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行“读出来” 比如第 2
行,是对第 1
行的描述,意思是:1
个 1
,1
个 3
,所以是:1113
第 3
行,意思是:3
个 1
,1
个 3
,所以是:3113
请你编写一个程序,可以从初始数字开始,连续进行这样的变换。
输入输出格式
输入格式 第一行输入一个数字组成的串,不超过 100
位。 第二行输入一个数字 n
,表示需要你连续变换多少次,n
不超过 20
。 输出格式 输出一个串,表示最后一次变换完的结果。
输入输出样例1
输入 3
5
输出 1113122113
输入输出样例2
输入 4
6
输出 311311222114
#include<iostream>
using namespace std;
int main() {
string str; //要转化的串
int n;
cin>>str>>n;
int num;
char flag;
string addStr; //每次转化后的串
while(n--) {
/*str每次都是一个新的串,我们要去转化它,输出转化后的结果*/
addStr="";
flag=' ';
/*当前要转化的这个串,我们只需要for循环走一遍,就能转化好*/
for(int i=0;i<str.length();i++){
if(str[i]!=flag){ //发现新字符,需要把前边的拼接一下
if(i!=0) addStr+=to_string(num)+flag; //第一个字母是新字母,但它前边没东西,不需要接啥
flag=str[i]; //现在旗帜改了,我们重新从这个字母出发
num=1;
}
else{ //旧段
num++;
}
}
addStr+=to_string(num)+flag; //最后一个段别忘了拼接上
str=addStr; //执行一次,又得到一个新串str
}
cout<<str;
return 0;
}