A1140.Look-and-say Sequence

題意

剛開始做這道題真是不好理解講的什麼鬼,直接舉例子吧。

當D = 1時。

  • 第一項:1;
  • 第二項:因爲第一項有1個1,所以爲:11
  • 第三項:因爲第二項有2個1,所以爲:12
  • 第四項:因爲第三項有1個1,1個2,所以爲:11,21
  • 第五項:因爲第四項有2個1(注意要求連續,不是3個),1個2,1個1,所以爲:122111

思路分析

使用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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章