前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1084 外观数列 (20 分)

1084 外观数列 (20 分)

作者头像
可爱见见
发布2019-11-18 23:08:02
7900
发布2019-11-18 23:08:02
举报
文章被收录于专栏:卡尼慕

1084 外观数列 (20 分)

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

代码语言:javascript
复制
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 项。

输入样例:

代码语言:javascript
复制
1 8

输出样例:

代码语言:javascript
复制
1123123111

【我的代码】

代码语言:javascript
复制
 1// 1084 外观数列 (20 分)
 2#include<iostream>
 3using namespace std;
 4int main()
 5{
 6    string a;
 7    int n;
 8    cin>>a>>n;
 9    while(--n){
10        string ans;
11        char c=a[0];
12        int cnt=0;
13        for(int i=0;i<a.length();i++){
14            if(a[i]==c) cnt++;
15            else{
16                ans+=c;
17                ans+=cnt+'0';
18                c=a[i];
19                cnt=1;
20            }
21        }
22        if(cnt>0){
23            ans+=c;
24            ans+=cnt+'0';
25        }
26        a=ans;
27    }
28    cout<<a<<endl;
29    return 0;
30}

【思路】

本题的迷惑系数还是比较大的,第一感觉就是把d当作int类型数据处理,用数组计数,但是会发现,每次遍历的长度难以确定(通过样例可以知道,每次的并不是单调增长或者递减的),因此也困惑了比较久。

这里借鉴了网上的代码,把这个输入的d当作字符串处理就显得非常简单了!

每次都是顺序读取,统计前一个字符所出现的次数,将统计的结果拼接到该字符末尾。然后下一次计数从下一个其他字符开始。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档