PAT Basic 1084
Posted yxp400
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1084相关的知识,希望对你有一定的参考价值。
1084 外观数列
外观数列是指具有以下特点的整数序列:
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
题解:啊,这道题看题真的是一个大问题,第一遍完全没有看懂题目,不过弄清题目意思后这道题也不难,前面其实有一些类似的题目,如字符串压缩等。
代码如下:
1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 int main() 7 { 8 int d, n, num, ok; 9 scanf("%d %d",&d,&n); 10 string a , b; 11 char c, h; 12 c = d + ‘0‘; 13 a += c; 14 for( int i = 1; i < n; i++ ){ 15 b = a; 16 a = ""; 17 h = c; 18 num = 0; 19 for( int j = 0; j < b.length();j++){ 20 if( b[j] == h){ 21 num++; 22 } 23 else{ 24 a += h; 25 a += (num + ‘0‘); 26 h = b[j]; 27 num = 1; 28 } 29 if( j == b.length()-1) { 30 a += h; 31 a += (num + ‘0‘); 32 } 33 } 34 } 35 cout<<a; 36 return 0; 37 }
以上是关于PAT Basic 1084的主要内容,如果未能解决你的问题,请参考以下文章
1084. Broken Keyboard (20)字符串操作——PAT (Advanced Level) Practise