zoj 1189 Numbers That Count

zoj 1189 Numbers That Count,第1张

zoj 1189 Numbers That Count
#include<iostream>#include<map>#include<string>#include<cstring>#include<stdio.h>using namespace std;enum {    SIZ = 100,};char buf[2][SIZ];char *pre, *cur;map<string,int> tab;void compute(){    static int d[10]={0};    static char mybuf[20];    int i,t;    memset(d,0,sizeof(d));    cur[0] = 0;    for(i=0;pre[i];i++){        t = pre[i] - '0';        d[t] ++;    }    for(i=0;i<10;i++){        if(d[i]==0) continue;        sprintf(mybuf,"%d%d",d[i],i);        strcat(cur,mybuf);    }}void fun(){    cout<<pre;    compute();    if(strcmp(pre,cur)==0){        cout<<" is self-inventorying"<<endl;        return;    }    int step = 0;    int t;    tab.clear();    while(step++ < 16){        string s(pre);        if(tab.find(s) != tab.end()){ t = tab[s]; step -= t; cout<<" enters an inventory loop of length "<<step<<endl; return;        } else { tab[s] = step;        }        char *k=pre; pre=cur; cur=k;        compute();        if(strcmp(pre,cur)==0){ cout<<" is self-inventorying after "<<step<<" steps"<<endl; return;        }    }    cout<<" can not be classified after 15 iterations"<<endl;}int main(){    int blocknum;    cin>>blocknum;    while(blocknum--){        pre = buf[0]; cur = buf[1];        cin>>pre;        while(pre[0] != '-'){ fun(); pre = buf[0]; cur = buf[1]; cin>>pre;        }        if(blocknum){ cout<<endl;        }    }return 0;}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4908809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存