Look-and-say sequence is a sequence of integers as the following:D, D1, D111, D113, D11231, D112213111, ...where D is 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 one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1's, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D. 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,第一个D的look-and-say sequence 就是D 比如1 8 第1个:1 第2个:11(1个1) 第3个:12(2个1) 第4个:1121(1个1,1个2) 。。。 第i个序列是对第i-1个序列的描述。 我们将第一个序列设为D,描述n次就可以了#include <cstdio> #include <iostream> #include <cstring> using namespace std; int n,d; int a[10] = {0}; string s[45]; int main() { scanf("%d%d", &d, &n); s[1] += (char)(d + '0'); for (int i = 1; i <= n; i++) { for (int j = 0; j < s[i].length(); j++) { int cnt = 1; char curChar = s[i][j]; for (int k = j+1; k < s[i].length(); k++) { if (s[i][k] == curChar) { cnt++; j++; }else { break; } } s[i+1] += curChar; s[i+1] += (char)(cnt+'0'); } } printf("%s\n", s[n].c_str()); return 0; }
查看原文:http://iluhao.top/archives/729
1140. Look-and-say Sequence (20)
最新推荐文章于 2020-12-02 23:34:26 发布