✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:PAT题解集合
📝原题地址:题目详情 - 1140 Look-and-say Sequence (pintia.cn)
🔑中文翻译:外观数列
📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
Look-and-say sequence is a sequence of integers as the following:
D, D1, D111, D113, D11231, D112213111, ...where
Dis in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is oneDin the 1st number, and hence it isD1; the 2nd number consists of oneD(corresponding toD1) and one 1 (corresponding to 11), therefore the 3rd number isD111; or since the 4th number isD113, it consists of oneD, two 1’s, and one 3, so the next number must beD11231. This definition works forD= 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digitD.Input Specification:
Each input file contains one test case, which gives
D(in [0, 9]) and a positive integer N (≤ 40), separated by a space.Output Specification:
Print in a line the Nth number in a look-and-say sequence of
D.Sample Input:
1 8Sample Output:
1123123111
给定一个 D 和 n ,按照 D 需要输出第 n 项外观序列,而外观序列的规则如下:
第 i 项序列要根据其前一项的序列生成,例如 D 等于 1 ,则第 2 项为 11 ,意思是前一项中 1 出现了 1 次;第 3 项为 12 ,即其前一项中 1 出现了 2 次;第 3 项为 1121 ,即其前一项中 1 出现了 1 次,2 出现了 1 次;第 4 项为 122111 ,即其前一项 1 先连续出现了 2 次,接着2 出现了 1 次,然后 1 又出现了 1 次。
所以可以发现,每项序列是根据其上一个序列的值中每个元素连续的个数来生成的。
具体思路如下:
num 以及需要输出的项数 n 。p 指向当前元素,而 q 指向与 p 指向元素相同的连续的最后一个元素的下一个位置,这样 q-p 就是 p 指向元素连续的个数。n 项序列。#include
using namespace std;int main()
{string num;int n;cin >> num >> n;//进行n-1次转换for (int i = 1; i < n; i++){int len = num.size();int p = 0;string str = "";while (p < len){int q = p + 1;//找出连续相同的字段while (q < len && num[q] == num[p]) q++;str += num[p] + to_string(q - p);p = q;}num = str;}//输出第n项序列cout << num << endl;return 0;
}