PAT 乙级 1084.外观数列 C++/Java
外观数列是指具有以下特点的整数序列:
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
C++实现:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 //1084:外观数列 5 // 1 11 12 1121 122111 112213 12221131 1123123111 6 string next(string d) { 7 string next = ""; 8 int cnt = 1; 9 for (int i = 1; i < d.length(); i++) { 10 if (d[i] == d[i - 1]) cnt++; 11 else { 12 next += d[i - 1] + to_string(cnt); 13 cnt = 1; 14 } 15 } 16 next += d[d.length() - 1] + to_string(cnt); 17 return next; 18 } 19 int main() { 20 int d, n; 21 cin >> d >> n; 22 string s = to_string(d); 23 while (n-- != 1) s = next(s); 24 cout << s; 25 return 0; 26 }
Java实现: