PAT_甲級_1140 Look-and-say Sequence

題目大意:

給定一個[0,9]的數字D和正整數N,第一個數字爲D,後面每個數字都是用來描述前面一個數字所產生的,要求輸出第N個數字。好比第一個數字爲1,描述爲有一個1,那麼第二個數字就是數字1和次數1的組合11,依次類推。ios

算法思路:

這裏採用字符串來處理該問題比較方便進行拼接操做,首先第一個數字爲輸入的D,那麼第N個數字就是處理了N-1次後的結果,咱們每一次處理使用字符串s來保存,而且每一次都會從新賦值給D做爲當前輪次的最終結果,每一次描述處理都須要遍歷字符串D,對於位置j的字符,須要找到第一個和它不相等的字符的位置k,同時記錄D[j]出現的次數num,這樣就獲得了當前字符D[j]的描述,而後將D[j]和num添加到字符串s中,而且更新j的位置爲k,直到循環結束。算法

注意點:

  • 一、當前字符位置j的更新得在字符串拼接操做以後進行。

提交結果:

image.png

AC代碼:

#include<cstdio>
#include<string>
#include<iostream>

using namespace std;

int main(){
    int N;
    string D;
    cin>>D>>N;
    for(int i=0;i<N-1;++i){
        // 處理N-1次 
        string s;
        for(int j=0;j<D.size();){
            int num = 0;// 當前字符D[j]的個數
            int k = j;// 記錄第一個與D[j]字符不相等的位置 
            while(k<D.size()) {
                if(D[j]==D[k]){
                    ++num;
                }else{
                    break;
                }
                ++k;
            }
            // 得到當前字符D[j]和其出現的次數
            s += D[j]; 
            s += to_string(num);
            j = k;
        }
        D = s;
    }
    cout<<D;
    return 0;
}
相關文章
相關標籤/搜索