码迷,mamicode.com
首页 > 编程语言 > 详细

PTA basic 1084 外观数列 (20 分) c++语言实现(g++)

时间:2021-05-24 08:25:54      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:测试   http   for   apache   names   namespace   位置   pre   lan   

外观数列是指具有以下特点的整数序列:

d, d1, d111, d113, d11231, d112213111, ...
 

它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对 d = 1 也成立。本题要求你推算任意给定数字 d 的外观数列的第 N 项。

输入格式:

输入第一行给出 [0,9] 范围内的一个整数 d、以及一个正整数 N(≤ 40),用空格分隔。

输出格式:

在一行中给出数字 d 的外观数列的第 N 项。

输入样例:

1 8
 

输出样例:

1123123111

 

 

题目描述有点迷惑    简单说就是  数列第一项为 d  ,从第二项开始   字符串中 每两个数字为 字符和字符个数 这一对组合  和前面的1078字符串压缩 基本上相同

从1开始就是  1 11 12 1121 122111   由d=1开始的序列和题目描述完全不同  ,  所以题目中强调了d从不等于1时开始,  但因为测试用例给出的d=1,有一点迷惑

从2开始就是 2 21 2111 2113 211231   这个时候就和题目描述相同了 

 

看别人的方法 https://www.liuchuo.net/archives/4646

比较巧妙的利用了循环的结构

      令 k=j 结束后 下标 k 会等于 循环次数+1  这个特点  用来计数 str[k]==str[j]  字符相同的个数 既k-j

      然后j进入下一轮循环的时候 j=k ; j从k位置开始找 

#include <iostream>
using namespace std;

int main(){
    int n;
    char d;
    string str,temp;
    cin >> d >> n;
    str.push_back(d);
    for(int i=0;i<n-1;i++){
        string result;
        int k;
        for(int j=0;j<str.size();j=k){
            for(k=j;k<str.size()&&str[k]==str[j];k++);
            result+=str[j]+to_string(k-j);
        }
        str=result;
    }
    cout << str<<endl;
    return 0;
}

 

 

#include <iostream>
using namespace std;

int main(){
    int n;
    char d;
    string str,temp;
    cin >> d >> n;
    str.push_back(d);
    for(int i=0;i<n-1;i++){
        string result;
        str.push_back( );
        int left{0},right{0};
        while(left<str.size()-1){
            int count=0;
            right=left;
            while(right<str.size()){
                if(str[right]==str[left]){
                    count++;
                }else{
                    result.push_back(str[left]);
                    result.push_back(count+0);
                    break;
                }
                right++;
            }
            left+=count;
        }
        str=result;
    }
    cout << str<<endl;
    return 0;
}

 

PTA basic 1084 外观数列 (20 分) c++语言实现(g++)

标签:测试   http   for   apache   names   namespace   位置   pre   lan   

原文地址:https://www.cnblogs.com/ichiha/p/14766429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!