北大ACM(POJ1016-Numbers That Count)

Question:http://poj.org/problem?id=1016
问题点:水题。
 1 Memory: 232K        Time: 125MS
 2 Language: C++        Result: Accepted
 3 
 4 #include <iostream>
 5 #include <string>
 6 using namespace std;
 7 
 8 string inventory(string n)
 9 {
10     int i;
11     int t[10];
12     char ch[4];
13     memset(t,0,sizeof(t));
14     for(i=0;i<n.length();i++)
15     {
16         t[n.at(i)-'0']++;
17     }
18     n.clear();
19     for(i=0;i<10;i++)
20     {
21         if(t[i]==0) continue;
22         sprintf_s(ch,"%d%d",t[i],i);
23         n+=ch;
24     }
25     return n;
26 }
27 int main()
28 {
29     int i,j;
30     bool flag;
31     string n[16];
32     while(cin>>n[0] && n[0]!="-1")
33     {
34         flag = false;
35         for(i=1;i<16;i++)
36         {
37             n[i] = inventory(n[i-1]);
38             for(j=0;j<i;j++)
39             {
40                 if(n[i]==n[j])
41                 {
42                     flag = true;
43                     if(i==1)
44                     {
45                         cout<<n[0]<<" is self-inventorying"<<endl;
46                     }
47                     else if((i-j)==1)
48                     {
49                         cout<<n[0]<<" is self-inventorying after "<<j<<" steps"<<endl;
50                     }
51                     else
52                     {
53                         cout<<n[0]<<" enters an inventory loop of length "<<i-j<<endl;
54                     }
55                 }
56             }
57             if(flag) break;
58         }
59         if(!flag) cout<<n[0]<<" can not be classified after 15 iterations"<<endl;
60     }
61     return 0;
62 }

 

posted @ 2017-03-02 17:06  月生丶  阅读(368)  评论(0编辑  收藏  举报