题目大意:定义一种外观序列,输出1个数经过N次迭代后得到的外观序列。
字符串问题,理解了题意后不算难。从左到右遍历字符串,如果有连续的相同数字,首先加上这个数本身,再加上重复的次数。要注意遍历到原字符串最后的特殊情况,需要额外加上一个“1”。
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
void iterate(string &str)
{
string ret;
ret += str[0];
if(str.size() == 1) ret += '1';
for (int i = 1; i < str.size(); ++i)
{
int cnt = 1;
while(i < str.size() && str[i] == ret[ret.size() - 1])
{
i++;
cnt++;
}
if(i < str.size())
{
ret += to_string(cnt);
ret += str[i];
if(i == str.size() - 1) ret += '1';
}
else ret += to_string(cnt);
}
str = ret;
}
int main()
{
string str;
int N;
cin >> str >> N;
for (int i = 1; i < N; ++i)
{
iterate(str);
}
printf("%s\n", str.c_str());
return 0;
}