題意
剛開始做這道題真是不好理解講的什麼鬼,直接舉例子吧。
當D = 1時。
- 第一項:1;
- 第二項:因爲第一項有1個1,所以爲:1
1
- 第三項:因爲第二項有2個1,所以爲:1
2
- 第四項:因爲第三項有1個1,1個2,所以爲:1
1
,21
- 第五項:因爲第四項有2個1(注意要求連續,不是3個),1個2,1個1,所以爲:1
2
21
11
。
思路分析
使用string s
作爲每一次變換後的字符串,初始爲輸入的D。遍歷處理n-1次,不是n次(因爲n=1時,不需處理),枚舉字符串的位置j,再枚舉k獲得連續的相同的字符個數num
,設臨時字符串t += (s[j] + to_string(num))
,處理一次後,則將s = t
,繼續下一次循環。
參考代碼:
#include <bits/stdc++.h>
using namespace std;
int main(void){
string s;int n;
cin>>s>>n;
for(int i = 1;i < n;i++) { //循環處理字符串n-1次
string t; //每一次更新後的字符串
int num; //每一個s[j]出現的次數
for(int j = 0;j < s.length();j+=num){ //枚舉字符串中所有不同的字符
num = 1;
for(int k = j+1;k < s.length();k++) { //從j後開始枚舉,找到相同的字符個數
if(s[k] == s[j]) num++;
else break;
}
t += (s[j] + to_string(num));
}
s = t;
}
cout<<s;
return 0;
}