zoukankan      html  css  js  c++  java
  • 1084. 外观数列 (20)

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

    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
    

    第n项是对第n-1项的描述,以样例为例,第一项是1,第二项需要看第一项只有一个1,所以第二项是11,第一个1代表第一项含有1,第二个1代表含有1个1,第三项看第二项两个连续的1,所以第三项是12,第四项是
    1121,第五项是122111,六112213,七12221131,八1123123111,很显然只看连续的。从第八项看第七项有1个1,3个2,2个1,1个3,1个1。
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,m,ans[2][100000],num;
    int zh(int *p,int *q,int d)
    {
        int c = 0;
        for(int i = 0;i < d;i ++)
        {
            if(!i || p[i] != p[i - 1])
            {
                q[c ++] = p[i];
                q[c ++] = 1;
            }
            else q[c - 1] ++;
        }
        return c;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        ans[0][0] = n;
        num = 1;
        for(int i = 1;i < m;i ++)
        {
            num = zh(ans[(i + 1) % 2],ans[i % 2],num);
        }
        for(int i = 0;i < num;i ++)
            printf("%d",ans[(m + 1) % 2][i]);
    }
  • 相关阅读:
    (第二天)原型、继承
    (第一天)包装对象、作用域、创建对象
    你欺骗了我,可选参数必须位于所有参数最后
    反射之动态创建对象
    异步编程
    前端性能优化方法
    性能瓶颈分析方法
    性能测试应用领域
    <转>jmeter(十五)函数助手
    正则表达式基础知识
  • 原文地址:https://www.cnblogs.com/8023spz/p/8760939.html
Copyright © 2011-2022 走看看