1. 题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200515135643933.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk3MjMzNw==,size_16,color_FFFFFF,t_70)
2. 解题过程
- 显然这是一个递归的问题,只要能输出第一个,第二个就能像第一个那样输出,我们可以简单模拟推导下一项的步骤,正如题目所说的:序列的第 n+1 项是对第 n 项的描述,这里的描述隐含了一个动作,就是数有几个连续又相同的字符,只要把这个搞出来就可以了。
- 数数是最简单基本的操作了,关键要统一形式,这里墙裂推荐使用string类型,集字符串处理于一身的神器,有了他就好解决了。
- 最后要注意的是把int型转化为string型,推荐使用sstream头文件,他能创建一个数据流,让int型与string型相互转化。
- 请看代码:
#include<cstring>
#include<string>
#include<iostream>
#include<sstream>
#include<cstdio>
using namespace std;
string Fun(string a)
{
string ans;
if(a.size() == 1)
{
ans = a + "1";
}
else
{
int cnt = 1;
for(int i = 1; i < a.size(); i++)
{
while(a[i] == a[i-1])
{
cnt++;
i++;
}
stringstream ss;
string num;
ss << cnt;
ss >> num;
ans += a.substr(i-1, 1) + num;
cnt = 1;
}
if(a[a.size()-1] != a[a.size()-2])
{
ans += a.substr(a.size()-1, 1);
ans += "1";
}
}
return ans;
}
int main()
{
string d; int n;
cin >> d; scanf("%d", &n);
string ans = d;
for(int i = 0; i < n-1; i++)
{
ans = Fun(ans);
}
cout << ans;
return 0;
}