1140 Look-and-say Sequence (20分)
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 8
Sample Output:
1123123111
这个题就是模拟吧
样例的计算过程如下
最初是 1
然后有一个1 就是 11
然后有两个1 就是12,然后一个1 一个2就是 1121
然后有两个1 一个2 一个1 就是122111
我代码可能麻烦,但是比较符合我思路,就是两个变量,一个thisNum记录当前计数的是哪个 ,比如我们是计算有几个1 还是几个2 ,这里的1 和2 就是thisNum要保存的数字。 然后一个number变量,记录thisNum当前的个数
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
int D,N;
cin>>D>>N;
vector<int> vec;
vec.push_back(D);
for(int i=0; i<N-1; i++)
{
vector<int> out;
int thisNum=-1;
int number=0;
for(int q=0; q<vec.size(); q++)
{
if(thisNum==-1)
{
thisNum=vec[q];
number=1;
}
else
{
if(vec[q]==thisNum)
{
number++;
}
else
{
out.push_back(thisNum);
out.push_back(number);
thisNum=vec[q];
number=1;
}
}
}
if(thisNum!=-1)
{
out.push_back(thisNum);
out.push_back(number);
thisNum=-1;
}
vec=out;
for(int i=0; i<out.size(); i++)
{
cout<<out[i];
}
cout<<endl;
}
return 0;
}