题目翻译:
给两个数字D
和n
,第⼀个序列是D
,后⼀个序列描述前⼀个序列的所有数字以及这个数字出现的次数,⽐如D出现了1
次,那么第⼆个序列就是D1
,对于第⼆个序列D1
,第三个序列这样描述: D
出现1
次,1
出现1
次,所以是D111
……以此类推,输出第n
个序列
题解思路:
因为N最大为40,所以可以直接冲
代码:
#include<bits/stdc++.h>
using namespace std;
int D, K;
int main()
{
cin >> D >> K; K--;
string s = to_string(D);
while (K--) {
string t = "";
int tag = 1;
if (s.size() == 1) {
s += '1';continue;
}
for (int i = 1;i < s.size();i++) {
if (s[i] == s[i - 1])
{
tag++;
if (i == s.size() - 1)
t += s[i], t += to_string(tag);
}
else {
t += s[i - 1], t += to_string(tag);
tag = 1;
if (i == s.size() - 1)
t += s[i], t += to_string(1);
}
}
s = t;
}
cout << s;
}
这个可能写繁了,可以参考下面这个:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1, s2;
int N;
cin >> s1 >> N;
for (int i = 0; i < N - 1;i++){
s2 = s1;
s1.clear();
int index = 1;
for (int j = 0; j < s2.size();j++){
if(s2[j] == s2[j + 1])
index++;
else{
s1 += s2[j] + to_string(index);
index = 1;
}
}
}
printf("%s", s1.c_str());
return 0;
}
坑点:
无