zoukankan      html  css  js  c++  java
  • 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;
    //}
  • 相关阅读:
    c++笔记--数组对象、vector对象和构造函数
    马加爵之歌
    周末有同学要来
    IQ
    [转]JavaScript中typeof 讲解
    【转】JS兼容Firefox
    firefox与ie 的javascript区别
    关于委托(转)
    经典常用的javascript代码收藏
    关于DataList使用DropDownList的分页实现 技巧实例源码
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13298935.html
Copyright © 2011-2022 走看看