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 }