北大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 }