1. 程式人生 > 實用技巧 >pat 1140

pat 1140

1140Look-and-say Sequence(20分)

Look-and-say sequence is a sequence of integers as the following:

D, D1, D111, D113, D11231, D112213111, ...

whereDis in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is oneDin the 1st number, and hence it isD1

; the 2nd number consists of oneD(corresponding toD1) and one 1 (corresponding to 11), therefore the 3rd number isD111; or since the 4th number isD113, it consists of oneD, two 1's, and one 3, so the next number must beD11231. This definition works forD= 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digitD
.

Input Specification:

Each input file contains one test case, which givesD(in [0, 9]) and a positive integer N (≤40), separated by a space.

Output Specification:

Print in a line the Nth number in a look-and-say sequence ofD.

Sample Input:

1 8

Sample Output:

1123123111

題意:給定一個數,按題目要求生成後n個數,輸出第n個數

思路:簡單字串處理

程式碼如下:(註釋部分是使用字串陣列來處理的,最後一個測試點會超時或段錯誤,歡迎評論區探討)

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s;
    string temp="";
    int n;
    cin>>s>>n;
    for(int i=1;i<n;i++){
        temp="";
        for(int j=0;j<s.length();j++){
            int count=1;
            int k=j;
            while(s[j+1]==s[k]&&j+1<s.length()){
                j++;
                count++;
            }
            temp+=s[k]+to_string(count);
        }
        s=temp;
    }
    cout<<s;
    return 0;
}
//#include<cstdio>
//#include<string>
//#include<iostream>
//#include<cstring>
//using namespace std;
//char str[5000];
//char temp[5000];
//int main(){
//    int n;
//    scanf("%s %d",str,&n);
//    if(n==1){
//        printf("%s",str);
//        return 0;
//    }
//    for(int i=0;i<n-1;i++){
//        int pos=0;
//        for(int j=0;j<strlen(str);j++){
//            int k=j;
//            int count=1;
//            while(str[j+1]==str[k]&&j+1<strlen(str)){
//                j++;
//                count++;
//            }
//            temp[pos++]=str[k];
//            temp[pos++]=count+'0';
//        }
//        temp[pos]='\0';
//        memcpy(str,temp,strlen(temp));
////        for(int j=0;j<=strlen(temp);j++){
////            str[j]=temp[j];
////        }
////    
//    }
//    printf("%s\n",str);
//    return 0;
//}