题目传送门<==戳这
思路:
其实就是将前一个数字串改变一下形式
改成: 元素 个数 元素 个数 元素 个数…
比如:
1 ==> 1 1 (一个1)
1 1 ==>1 2 (两个1)
1 2 ==>1 1 2 1 (一个1和一个2)
1 2 2 1 1 1 (两个1和一个2和一个1)
知道怎么推导之后,直接上代码
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int d,x,len,cnt;
string res; ==>保存每次修改更新后的串
cin>>d>>x;
if(x==1) printf("%d",d); ==>特判x==1的时候按原样输出
else{
res=(d+'0');
while(--x){ ==>注意是从第二次开始修改,不能写成x--
string temp; ==>临时字符串记录连续的数字
char ch=res[0]; ==>连续数字的标记
cnt=0; ==>连续数字的个数
len=res.length();
for(int i=0;i<len;i++){
if(res[i]==ch){
cnt++;
}else{
temp+=ch;
temp+=(cnt+'0');
ch=res[i];
cnt=1;
}
}
if(cnt>0){ ==>处理到字符串末尾的时候也是连续的
temp+=ch; ==>补上一句处理末尾数串的代码
temp+=(cnt+'0');
}
res=temp; ==>更新res数串
}
cout<<res;
}
}