乐逍遥xwl

导航

1084 外观数列

外观数列是指具有以下特点的整数序列:

d, d1, d111, d113, d11231, d112213111, ...

它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对 d = 1 也成立。本题要求你推算任意给定数字 d 的外观数列的第 N 项。

输入格式:

输入第一行给出 [0,9] 范围内的一个整数 d、以及一个正整数 N(≤ 40),用空格分隔。

输出格式:

在一行中给出数字 d 的外观数列的第 N 项。

输入样例:

1 8

输出样例:

1123123111
 
思路:还是模拟,模拟就完事了,这题类似与 1078 字符串压缩与解压......
 
 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     int num,N;
 8     cin>>num>>N;
 9     int sum[100005];
10     int sum1[100005];
11     sum[0]=num;//第一步
12     sum1[0]=sum[0];
13     sum[1]=1;//第二步 
14     sum1[1]=sum[1];
15     if(N<=2)
16     {
17         for(int i=0;i<N;i++)
18         cout<<sum[i];
19         return 0;
20     }
21     int count=2;
22     for(int i=2;i<N;i++)
23     {
24         int ans=1;
25         int t=count;//代替count 
26         count=0;//刷新count存数 
27         for(int j=0;j<t;j++)
28         {
29             int temp=sum1[j];
30             //cout<<"temp:"<<temp<<endl; 
31             if(sum1[j]==sum1[j+1])
32             {
33                 ans++;
34             }
35             else
36             {
37                 sum[count++]=temp;//存数 
38                 sum[count++]=ans;//存数量
39                 ans=1;//刷新ans 
40             }
41         }
42         for(int i=0;i<count;i++)
43             sum1[i]=sum[i];    
44     }
45     for(int i=0;i<count;i++)
46         cout<<sum[i];
47     return 0;
48 }

 

 

posted on 2019-03-07 15:01  乐逍遥xwl  阅读(127)  评论(0编辑  收藏  举报