一道简单的模拟题。
题目翻译:
给你一个由 0 ∼ 9 0\sim9 0∼9 的数字组成的字符串。请你对该字符串进行 n n n 次操作之后输出。
操作如下:
- 从左至右,如果一个数字 a a a 连续出现 r r r 次,将这一段字符串简化成 r a ra ra 的格式。例如:字符串 “122244”,从左开始依次是 1 1 1 个 1 1 1, 3 3 3 个 2 2 2, 2 2 2 个 4 4 4,最终这次操作得出来的是字符串是 “113224”。对字符串 “44444444444” 进行依次操作,得出的字符串是“114”。
规定:给定的字符串长度在 100 100 100 以下,且 n ≤ 20 n \le 20 n≤20。
本题直接手动模拟即可,代码如下。( stringstream \texttt{stringstream} stringstream 真的很好用)
参考代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int t = 0;
string str;
int main () {
cin >> n;
cin >> str;
while (n --) {
char s = str[0];
string change = "";
int l = str.size();
for (int i = 0; i < l; i ++) {
if (str[i] == s) {
t ++;//累计当前出现的次数
}
if (str[i] != str[i + 1]) {//判断下一个字符是否与当前的字符相同
stringstream ss;
ss << t;//将数字转成字符串
change += ss.str();
change += s;
//以上两行代码是记录操作后的结果
t = 0;//清零,初始化
s = str[i + 1];//替换成下一个字母
}
}
str = change;//存这次操作后的结果, 覆盖掉原字符串
t = 0;
}
cout << str << "\n";
return 0;
}