zoukankan      html  css  js  c++  java
  • 与班尼特·胡迪一起找简单规律(HZOJ-2262)

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

    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("
    ");
    48     }
    49     system("pause");
    50     return 0;
    51 }

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

  • 相关阅读:
    selenium浏览器操作以及对象定位
    Selenium简介以及selenium环境搭建
    JMeter测试组件
    JMeter基础:元件的顺序
    Appium
    Appium 设备操作API(根据坐标滑动)
    关于接口测试的总结
    五种方式来消除你对测试文档的仇视
    bs架构与cs架构的区别
    Eclipse的错误: 找不到或无法加载主类 10种解决大法!!!!!
  • 原文地址:https://www.cnblogs.com/Tangent-1231/p/8127474.html
Copyright © 2011-2022 走看看