题意
刚开始做这道题真是不好理解讲的什么鬼,直接举例子吧。
当D = 1时。
- 第一项:1;
- 第二项:因为第一项有1个1,所以为:1
1
- 第三项:因为第二项有2个1,所以为:1
2
- 第四项:因为第三项有1个1,1个2,所以为:1
1
,21
- 第五项:因为第四项有2个1(注意要求连续,不是3个),1个2,1个1,所以为:1
2
21
11
。
思路分析
使用string s
作为每一次变换后的字符串,初始为输入的D。遍历处理n-1次,不是n次(因为n=1时,不需处理),枚举字符串的位置j,再枚举k获得连续的相同的字符个数num
,设临时字符串t += (s[j] + to_string(num))
,处理一次后,则将s = t
,继续下一次循环。
参考代码:
#include <bits/stdc++.h>
using namespace std;
int main(void){
string s;int n;
cin>>s>>n;
for(int i = 1;i < n;i++) { //循环处理字符串n-1次
string t; //每一次更新后的字符串
int num; //每一个s[j]出现的次数
for(int j = 0;j < s.length();j+=num){ //枚举字符串中所有不同的字符
num = 1;
for(int k = j+1;k < s.length();k++) { //从j后开始枚举,找到相同的字符个数
if(s[k] == s[j]) num++;
else break;
}
t += (s[j] + to_string(num));
}
s = t;
}
cout<<s;
return 0;
}