字符串操作,也没啥技术含量了
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
string inventory(string s)
{
int count[10];
memset(count, 0, sizeof(count));
for (size_t i = 0; i != s.size(); i++)
count[s[i] - '0']++;
string res;
char temp[10];
for (int i = 0; i < 10; i++)
if (count[i])
{
sprintf(temp, "%d", count[i]);
res += temp;
res += i + '0';
}
return res;
}
int main()
{
int t;
cin >> t >> ws;
string line;
for (int k = 0; k < t; k++)
{
if (k)
cout << endl;
while (cin >> line && line != "-1")
{
string ss[16];
ss[0] = line;
bool find = false;
for (int i = 1; i <= 15 && !find; i++)
{
line = inventory(line);
for (int j = 0; j < i && !find; j++)
{
if (j == 0 && i == 1 && line == ss[j])
{
cout << ss[0] << " is self-inventorying" << endl;
find = true;
}
else if ((i - j == 1) && line == ss[j])
{
cout << ss[0] << " is self-inventorying after " << j
<< " steps" << endl;
find = true;
}
else if (line == ss[j])
{
cout << ss[0] << " enters an inventory loop of length "
<< i - j << endl;
find = true;
}
}
ss[i] = line;
}
if (!find)
cout << ss[0] << " can not be classified after 15 iterations"
<< endl;
}
}
return 0;
}