与班尼特·胡迪一起找简单规律

Time Limit:   1 s      Memory Limit:   256 MB

Description

 

班尼特·胡迪发现了一个简单规律

给定一个数列,1 , 11, 21, 1211,1231 , 131221……,其规律如下:

1(首项),

前一项 “1” 中有1个1   -> 所以第二项为 11,

前一项 “11”中有2个1   ->所以第三项为  21,

前一项 “21”中有1个2,1个1  -> 所以第四项为1211,

1个2,3个1  -> 1231 ,

1个3,1个2,2个1 -> 131221,

……

现在,给你首项 n ,请输出数列中第m个数,0<m<1000000, m的总和不超过 1.1×10^6 ,n的长度不超过1000000.

 

Input

多组输入,每行输入两个自然数,n和m。

 

Output

每行输出一个答案。

Samples

input:
1  6
output:
131221

Author

Source

杭州师范大学第十一届程序设计竞赛

 

题解:统计一个数字出现的次数,然后次数+数字从大到小输出。

思路:这边要注意n的长度是0-1000000,注意不是大小!!!读入要用字符串读入。然后算m-1次。

贴一下我自己补的代码。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 using namespace std;
 7 int a[1000000];
 8 int num[10];
 9 int main()
10 {
11     char n[1000000];
12     int m;
13     int l,i,numble;
14     while(scanf("%s %d",&n,&m)!=EOF)                 //读入数据
15     {
16         l=strlen(n);                                 //字符串长度
17         for(i=0;i<l;i++)                          //倒着读入
18         {
19             a[i]=n[i]-'0';                       //存数字
20         }
21         m=m-1;
22         while(m--)                        //循环m-1遍
23         {
24             memset(num,0,sizeof(num));            //清空一次每个数字出现几次
25             for(i=0;i<l;i++)
26             {
27                 num[a[i]]++;                     //计算每个数字出现的次数
28             }
29             l=0;                              //清空长度
30             for(i=0;i<=9;i++)
31             {
32                 if(num[i]>0)                 //从0开始,如果该数据出现了
33                 {
34                     a[l++]=i;                //第一个输入是什么数字
35                     while(num[i]>0)
36                     {
37                         a[l++]=num[i]%10;       //第二个计算出现的次数,大于10要逐个取出来
38                         num[i]/=10;
39                     }
40                 }
41             }
42         }
43         for(i=l-1;i>=0;i--)
44         {
45             printf("%d",a[i]);            //要从大到小输出
46         }
47         printf("\n");
48     }
49     system("pause");
50     return 0;
51 }

 贴一下出题人美丽的代码:https://paste.ubuntu.com/26264736/