• Numbers that count 1016 PKU


    Description:

    一个数的inventory是0-9每个数字出现多少次,例如5553141的inventory是21131435

    1. 如果一个数的inventory是其本身,则称其为self-inventorying,例如31123314的inventory还是31123314

    2. 一个数迭代j步求inventory之后可能是self-inventorying ,例如21221314à31321314à31123314à31123314,则21221314 is self-inventorying after 2 steps

    3. 一个数inventory迭代时,可能在第j步之后,进入一个长度为看的inventory循环,例如314213241519 enters aninventory loop of length 2,314213241519à 412223241519à 314213241519:j=0,k=2

    4. 一个数如果15次迭代之后没有上述性质,则ncan not be classified after 15 iterations

    Solution:

    1 #include <stdio.h>
    2 #include <string.h>
    3
    4  #define CHARSIZE 128
    5
    6  void Inventory(char *in, char *out)
    7 {
    8 int usedTime[10]={0};
    9 int i=0,k=0,p_s=0,flag=0;
    10 int temp[16];
    11
    12 // memset((void*)usedTime,0,sizeof(usedTime));
    13  
    14 for (i=0; in[i]; i++)
    15 usedTime[in[i]-'0'] ++;
    16
    17 for (p_s=0,i=0; i<10; i++)
    18 {
    19 k = -1;
    20 flag = 0;
    21 while (usedTime[i])
    22 {
    23 temp[++k] = usedTime[i] % 10 + '0';
    24 usedTime[i] /= 10;
    25 flag = 1;
    26 }
    27 while (k>=0)
    28 {
    29 out[p_s++] = temp[k--];
    30 }
    31 if (flag)
    32 out[p_s++] = i+'0';
    33 }
    34 out[p_s++] = '\0';
    35 }
    36
    37  int main ()
    38 {
    39 char inStr[16][CHARSIZE];
    40 int i=0,j=0;
    41
    42 while (scanf ("%s",inStr[0]))
    43 {
    44 if (inStr[0][0] == '-')
    45 break;
    46
    47 for (i=0; i<15; i++)
    48 {
    49 Inventory(inStr[i],inStr[i+1]);
    50 // self-inventorying after i steps
    51 if (strcmp(inStr[i],inStr[i+1])==0)
    52 {
    53 //to do
    54 if (i)
    55 printf ("%s is self-inventorying after %d steps\n",inStr[0],i);
    56 else
    57 printf ("%s is self-inventorying\n",inStr[0]);
    58 break;
    59 }
    60 // for (j=0; j<i; j++)
    61 // 注意,必须写成下列格式才能保证minimize the length of inventory loop
    62 for (j=i-1; j>=0; j--)
    63 if (strcmp (inStr[i+1],inStr[j])==0)
    64 {
    65 printf ("%s enters an inventory loop of length %d\n",inStr[0],i+1-j);
    66 break;
    67 }
    68 if (j>=0)
    69 break;
    70 }
    71 if (i==15)
    72 printf ("%s can not be classified after 15 iterations\n",inStr[0]);
    73 }
    74 return 0;
    75 }
  • 相关阅读:
    一条短信控制你的手机! Android平台的SQL注入漏洞浅析
    技术分享 Android动态调试程序
    [Java] java byte数组与int,long,short,byte转换
    技术分享:. 外部动态加载DEX文件风险浅谈
    TestLink的使用
    selenium_页面设计模式PageFactory与动态Xpath
    selenium_maven高级实战
    selenium_Jenkins高级实战篇
    将本地Git仓库中的内容上传至GitHub
    将本地下载的jar导入到本地的私有仓库中
  • 原文地址:https://www.cnblogs.com/eavn/p/1752984.html
Copyright © 2020-2023  润新知