1084 外观数列 (20分)

1084 外观数列 (20分)
 

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

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


代码讲解:此题我还是用纯c解的,这题要小心,他最后的数据非常长,用数组很容易超界,最后我直接开到了
最大。。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char a[1000000]={0},b[1000000],num[200];//数组一定要开大
 6     int start,n,str,i,j,count,num_count;
 7     scanf("%d %d",&start,&n);
 8     a[0]=start+'0';a[1]='\0';
 9     while(--n)
10     {
11         str=strlen(a);
12         count=1;
13         b[0]=a[0];  //b数组相当于收集a数组不重复元素的那些
14         for(i=1,j=0;i<=str;i++) //注意是小于等于,因为这样能帮助最后一个元素也不落下。
15         {
16             if(b[j]==a[i])
17             {
18                 count++;
19             }
20             else
21             {
22                 b[++j]=count+'0';
23                 num_count=0;
24                 while(count!='\0')
25                 {
26                     num[num_count++]=count%10;
27                     count/=10;
28                 }
29                 while(--num_count) b[++j]=num[num_count];
30                 b[++j]=a[i];
31                 count=1;
32             }
33         }
34         strcpy(a,b);
35      }
36      printf("%s\n",a); 
37     return 0;
38  } 

 

 
posted @ 2020-11-21 00:13  罪梦者  阅读(139)  评论(0)    收藏  举报