Look-and-say Sequence
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 this 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 one), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, and both 1 ' s, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now is 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 an 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 8
Sample Output:
1123123111
Test Instructions
Given an initial number d and a target sequence number n, the nth sequence of outputs is required.
The generation rule for a sequence is that the latter sequence is a description of the number of consecutive digits in the previous sequence. Take d = 1 as an example: sequence ①:1, that is, d itself, sequence ②:11, indicating that there is a 1 in ①, sequence ③:12, indicating that there are 2 1 in ②, sequence ④:1121, indicating ③ 1 1, a 2, sequence ⑤:122111, indicating ④ 2 1, a 2, a 1;
Ideas
Just follow the test instructions to simulate, see the code.
Code Implementation
#include <iostream> #include <string> #include <vector> using namespace std
; void Nextstring (String &s)//generates the next sequence {vector<char> temp; Stores the current sequence of each number and its number int x = s[0]-' 0 '; Current number int cnt = 0;
The current number number for (int i = 0; i < s.length (); i++) {if (S[i]-' 0 ' = = x) cnt++;
else//old digit continuous sequence end {temp.push_back (x);
Temp.push_back (CNT); x = s[i]-' 0 ';
Update Current number CNT = 1; }} temp.push_back (x);
The last number of the current sequence and its number are deposited into the temp temp.push_back (CNT); S.clear ();
Empties the current sequence for (int i = 0; i < temp.size (); i++) s + = Temp[i] + ' 0 ';
} int Main () {string D;
int n;
Cin >> d >> N;
for (int i = 0; i < n-1; i++)//Only n-1 times nextstring (d) is executed;
cout << D;
return 0; }