思路解析:
题目的意思很简单,就是让统计连续数字出现的个数,然后在个数前面加上这个数,怀疑陈姥姥就是故意刁难我们的……
比如122224333。
1连续出现了1次,所以是11;2连续出现了4次所以是24,加上前面算出来的11就是1124;4连续出现了1次,所以是41,同理加上前面的1124就是112441;3连续出现了3次,所以是33,结果就是11244133。
具体步骤:
有了思路,步骤就很简单啦,就是简单地统计个数。不过我想推荐一种相对简洁的代码。
这种思想是这样的:先用一个指针a指向当前匹配组的首元素,再用另一个指针b从指针a所指向的位置开始,顺移下去统计个数。b指针所指的末尾就是下一组匹配的开始。
我一开始想到的是s[i] == s[i+1]这种匹配模式,这无疑会带来多种问题和矛盾,首先得保证i+1不能越界,再其次出现次数count很难统计,会陷入多种细枝末节的小问题中,从而显得代码冗余。写出来给自己长长记性!希望各位没采坑……
示例代码:
#include<iostream>
#include<string>
using namespace std;
int main() {
string a;
int n,k;
cin >> a >> n;
for (int i = 1; i < n; i++) {//执行n-1次 找第n项
string res;
for (int j = 0; j < a.length(); j = k) {//每一组匹配的首字母
for (k = j; k < a.length() && a[k] == a[j]; k++);//每一组内连续相同字母的个数
res += a[j] + to_string(k-j);
}
a = res;//新生成的字符串
}
cout << a;
return 0;
}