pat 1140

1140 Look-and-say Sequence (20分)

 

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

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

where D is 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 one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1's, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D.

Input Specification:

Each input file contains one test case, which gives D (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 of D.

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]='';
//        memcpy(str,temp,strlen(temp));
////        for(int j=0;j<=strlen(temp);j++){
////            str[j]=temp[j];
////        }
////    
//    }
//    printf("%s
",str);
//    return 0;
//}
原文地址:https://www.cnblogs.com/foodie-nils/p/13298935.html