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
题意,题目意思不太好理解 有点把我整懵逼了
举个梨子就是6655551111441 ----> 这个的下一个就是6254144211 就是6 有2个5有4个1有4个
这边需要注意的是 是连续的!!连续的!!!
如果输入的N是1 的话 就直接输出D了
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
char str[100000],one[100000];
using namespace std;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
str[0] = n+'0';
str[1] = '\0';
if(k == 1){
printf("%c\n",str[0]);
return 0;
}//如果说k等于1 否则下面都不是了
int leng;
for(int p = 2;p <= k;p ++)
{
int now = 0,tt = 0;
char ch = n +'0';
leng = strlen(str);
for(int i = 0;i < leng;i++)
{
if (str[i] == ch)
now++;
else //遇到不同了
{
one[tt++]=ch;
one[tt++]=now+'0';
ch=str[i];
now = 1;
}
}
one[tt++]=ch;
one[tt++]=now+'0';
one[tt] = '\0';
strcpy(str,one);
}
cout<<str<<endl;
return 0;
}