写在前面

  • 思路分析
  • 给两个数字D和n,第1个序列是D,后1个序列列描述前1个序列列的所有数字以及这个数字出现的次数
  • 比如D出现1次,那么第2个序列就是D1,对于第2个序列列D1,第三个序列列这样描述:D出现1次, 1出现1次,所以是D111……以此类推,输出第n个序列
  • 用string s接收所需变换的数字,每次遍历s,从当前位置i开始,看后面有多少个与s[i]相同,设j处开始不相同,那么临时字符串串 t += s[i] + to_string(j – i);
  • 然后再将t赋值给s, cnt只要没达到n次就继续循环下1次,最后输出s的值
  • 题目有一定难度,逻辑理解有一定难度
  • 2次回顾,实现巧妙

测试用例

input:
1 8
output:
1123123111

ac代码

#include <iostream>
using namespace std;
int main()
{
string s;
int n, j;
cin >> s >> n;
for(int cnt=1; cnt<n; cnt++)
{
string t;
for(int i=0; i<s.length(); i=j)
{
// 迭代计算当前字符出现次数
for(j=i; j<s.length()&&s[j] == s[i]; j++);
// 字符子串拼接
t+= s[i] + to_string(j-i);
}
// 更新当前迭代次数对应的结果串s
s = t;
}
cout << s;
return 0;
}