POJ 1016 Numbers That Count(水~)

来源:互联网 发布:钢窗 知乎 编辑:程序博客网 时间:2024/06/03 13:31

Description
每个数字串都可以被压缩成c1 d1 c2 d2 … cn dn的形式,如果一个串被压缩几次之后和自己相同则称之为self-inventorying,对于一个串n有三种情况:
1. n压缩1次就马上出现self-inventorying特性,即 n n n n n n n …..
2. n压缩j次后的数字串J出现self-inventorying特性,即 n A B C….H I J J J J J J J
3. n压缩j次后的数字串J,每再压缩K次,重新出现数字串J,即n A B… J ..K J ..K J..K J
其中K称为循环间隔,K>=2
现给出一个数字串,判断其属于以上哪一种
Input
多组用例,每组用例占一行为一长度不超过80的数字串,以-1结束输入
Output
对于每组用例,判断该串属于哪种情况
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
Solution
水题
Code

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define maxn 111char s[22][maxn];void deal(char *s1,char *s2){    int len=strlen(s1),num[11],res=0;    memset(num,0,sizeof(num));    for(int i=0;i<len;i++)        num[s1[i]-'0']++;    for(int i=0;i<10;i++)        if(num[i])        {            if(num[i]>9)s2[res++]=num[i]/10+'0',num[i]%=10;            s2[res++]=num[i]+'0';            s2[res++]=i+'0';        }    s2[res]='\0';}int main(){    while(~scanf("%s",s[0]),s[0][0]!='-')    {        int f1,f2,f3;        f1=f2=f3=0;        for(int i=1;i<=15;i++)deal(s[i-1],s[i]);        if(!strcmp(s[0],s[1]))f1=1;        if(!f1)        {            for(int i=1;i<15;i++)                if(!strcmp(s[i],s[i+1]))                {                    f2=i;                    break;                }            if(!f2)            {                for(int i=1;i<=15;i++)                {                    for(int j=0;j<=i-2;j++)                        if(!strcmp(s[i],s[j]))                        {                            f3=i-j;                            break;                        }                    if(f3)break;                }            }        }        if(f1)printf("%s is self-inventorying\n",s[0]);        else if(f2)printf("%s is self-inventorying after %d steps\n",s[0],f2);        else if(f3)printf("%s enters an inventory loop of length %d\n",s[0],f3);        else printf("%s can not be classified after 15 iterations\n",s[0]);    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 232串口打开失败怎么办 逆水寒cpu不支持怎么办 显卡被禁用了怎么办 vmvare注册错了怎么办 电脑主机未成功启动怎么办 主机未成功启动怎么办 电脑主机未能成功启动怎么办 虚拟机没有自带怎么办 错误连接为720怎么办 dns错误不能上网怎么办 家里无线用不了怎么办 磁盘c5坏了怎么办 一体机装xp蓝屏怎么办 虚拟机密码忘记了怎么办 vivoy66手机太卡怎么办 虚拟机装xp蓝屏怎么办 exagear玩起来卡怎么办 第五人格模拟器玩太卡怎么办 速腾油箱盖打不开怎么办 奥迪a6油箱盖打不开怎么办 苹果手提虚拟机黑屏怎么办 mac系统桌面变大怎么办 删除文件要权限怎么办 页面载入错误了怎么办 手机打不开excel表格怎么办 皇室战争闪退怎么办 苹果老是闪退怎么办 黑苹果开机黑屏怎么办 MAC磁盘删了怎么办 mac磁盘被锁定怎么办 bt5读不到网卡怎么办 笔记本电脑cpu温度过高怎么办 笔记本cpu温度过高怎么办 联想系统崩溃了怎么办 办公软件用不了怎么办 win10设置闪退怎么办 手机浏览器版本低怎么办 wps界面动不了怎么办 手机设置删了怎么办 苹果手机设置不见了怎么办 笔记本电脑键盘不好使怎么办