zoukankan      html  css  js  c++  java
  • POJ 1016 模拟字符串

    Numbers That Count
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 20396   Accepted: 6817

    Description

    "Kronecker's Knumbers" is a little company that manufactures plastic digits for use in signs (theater marquees, gas station price displays, and so on). The owner and sole employee, Klyde Kronecker, keeps track of how many digits of each type he has used by maintaining an inventory book. For instance, if he has just made a sign containing the telephone number "5553141", he'll write down the number "5553141" in one column of his book, and in the next column he'll list how many of each digit he used: two 1s, one 3, one 4, and three 5s. (Digits that don't get used don't appear in the inventory.) He writes the inventory in condensed form, like this: "21131435".

    The other day, Klyde filled an order for the number 31123314 and was amazed to discover that the inventory of this number is the same as the number---it has three 1s, one 2, three 3s, and one 4! He calls this an example of a "self-inventorying number", and now he wants to find out which numbers are self-inventorying, or lead to a self-inventorying number through iterated application of the inventorying operation described below. You have been hired to help him in his investigations.

    Given any non-negative integer n, its inventory is another integer consisting of a concatenation of integers c1 d1 c2 d2 ... ck dk , where each ci and di is an unsigned integer, every ci is positive, the di satisfy 0<=d1<d2<...<dk<=9, and, for each digit d that appears anywhere in n, d equals di for some i and d occurs exactly ci times in the decimal representation of n. For instance, to compute the inventory of 5553141 we set c1 = 2, d1 = 1, c2 = 1, d2 = 3, etc., giving 21131435. The number 1000000000000 has inventory 12011 ("twelve 0s, one 1").

    An integer n is called self-inventorying if n equals its inventory. It is called self-inventorying after j steps (j>=1) if j is the smallest number such that the value of the j-th iterative application of the inventory function is self-inventorying. For instance, 21221314 is self-inventorying after 2 steps, since the inventory of 21221314 is 31321314, the inventory of 31321314 is 31123314, and 31123314 is self-inventorying.

    Finally, n enters an inventory loop of length k (k>=2) if k is the smallest number such that for some integer j (j>=0), the value of the j-th iterative application of the inventory function is the same as the value of the (j + k)-th iterative application. For instance, 314213241519 enters an inventory loop of length 2, since the inventory of 314213241519 is 412223241519 and the inventory of 412223241519 is 314213241519, the original number (we have j = 0 in this case).

    Write a program that will read a sequence of non-negative integers and, for each input value, state whether it is self-inventorying, self-inventorying after j steps, enters an inventory loop of length k, or has none of these properties after 15 iterative applications of the inventory function.

    Input

    A sequence of non-negative integers, each having at most 80 digits, followed by the terminating value -1. There are no extra leading zeros.

    Output

    For each non-negative input value n, output the appropriate choice from among the following messages (where n is the input value, j is a positive integer, and k is a positive integer greater than 1):
    n is self-inventorying
    n is self-inventorying after j steps
    n enters an inventory loop of length k
    n can not be classified after 15 iterations

    Sample Input

    22 
    31123314 
    314213241519 
    21221314 
    111222234459 
    -1

    Sample Output

    22 is self-inventorying 
    31123314 is self-inventorying 
    314213241519 enters an inventory loop of length 2 
    21221314 is self-inventorying after 2 steps 
    111222234459 enters an inventory loop of length 2 

    Source

    题意:
    水题题意太繁就不写了吧。
    代码:
     1 /*
     2 坑爹的题,简单的模拟只是字符串处理不好弄,刚开始想用itoa函数直接把数字加到字符串后面,但在POJ上ce了应该是不支持这个函数
     3 后来发现一个数字竟然可以赋值给一个字符变量,这样就可以把数字一个一个的加到字符数组里(最后要把加到字符数组里),C学的不好。
     4 */
     5 #include<iostream>
     6 #include<cstdio>
     7 #include<cstring>
     8 #include<string>
     9 using namespace std;
    10 char ch[20][90];
    11 int a[10];
    12 int main()
    13 {
    14     while(scanf("%s",&ch[0])!=EOF)
    15     {
    16         if(!strcmp(ch[0],"-1")) break;
    17         bool flag=0;
    18         for(int k=1;k<=15;k++){
    19         memset(a,0,sizeof(a));
    20         int lne=strlen(ch[k-1]);
    21         for(int i=0;i<lne;i++)
    22         a[ch[k-1][i]-'0']++;
    23         char s[90];
    24         int t=0;
    25         for(int i=0;i<10;i++)
    26         {
    27             if(a[i]==0)
    28             continue;
    29             if(a[i]>=10)
    30             {
    31                 s[t++]=a[i]/10+'0';
    32                 s[t++]=a[i]%10+'0';
    33             }
    34             else s[t++]=a[i]+'0';
    35             s[t++]=i+'0';
    36         }
    37         s[t]='';
    38         if(!strcmp(s,ch[k-1]))
    39         {
    40             if(k==1)
    41             printf("%s is self-inventorying
    ",ch[0]);
    42             else
    43             printf("%s is self-inventorying after %d steps
    ",ch[0],k-1);
    44             flag=1;
    45         }
    46         else
    47         {
    48             for(int i=k-2;i>=0;i--)
    49             if(!strcmp(s,ch[i]))
    50             {
    51                 printf("%s enters an inventory loop of length %d
    ",ch[0],k-i);
    52                 flag=1;
    53                 break;
    54             }
    55         }
    56         if(flag) break;
    57         strcpy(ch[k],s);
    58         }
    59         if(!flag)
    60         printf("%s can not be classified after 15 iterations
    ",ch[0]);
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    物理层的三种编码方式
    Mysql中eft join、right join、inner join的区别
    Linux常用命令
    Linux中文件颜色所代表的属性和颜色
    phpcms v9 中的数据库操作函数
    NetBeans无法使用编码GBK安全打开文件
    PHP中的一些常用正则表达式
    eureka强制下线上线
    perl(JSON) is needed by mysql-community-test-5.7.30-1.el7.x86_64
    利用TikZ 宏包在 LaTeX 中绘制流程图
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/5936397.html
Copyright © 2011-2022 走看看