poj1016

题目大意:数据统计

看明白了,就是给你一个数,例如31123314,代表的意思有3个1,1个2,3个3,1个4,但数字本身的有的数字也是有3个1,1个2,3个3,1个4,所以这样的数叫做self-inventorying ,如果经过j步可以变成self-inventorying可以输出self-inventorying after j steps.如果经过j步变成的数跟前面的数一样那就输出enters an inventory loop of length 如果经过15次迭代还无法变成上面的分类,就输出can not be classified after 15 iterations。

明白意思应该不难了- -,做做去
学习了string 的应用
#include<iostream>
#include<string>
using namespace std;
#define maxn 100
string SelfString(string str)
{
    int i, a[10]={0};
    string s;
    for(i=0; i<str.length(); i++)
        a[str[i]-'0']++;
    for(i=0; i<10; i++)
    {
        if(a[i])
        {
            while(a[i])
            {
                s += a[i]%10+'0';
                a[i] /= 10;
            }
            s += i+'0';
        }
    }
    return s;
}
int main()
{
    string str;
    while(cin >> str, str != "-1")
    {
        string a[maxn];
        int i, j, k=1, ans=0;
        a[0] = str;
        for(i=1; i<=15; i++)
        {
            a[i] = SelfString(a[i-1]);
            if(a[i] == a[i-1])
            {
                ans = 1;
                break;
            }
            for(j=0; j<i; j++)
                if(a[i] == a[j])
                {
                    ans = 2;
                    break;
                }
            if(j < i)
                break;
        }
        if(ans==1 && i==1)
            cout << a[0] <<" is self-inventorying "<<endl;
        else if(ans==1)
            cout << a[0] <<" is self-inventorying after "<< i-1 <<" steps "<<endl;
        else if(i <= 15)
            cout << a[0] <<" enters an inventory loop of length " << i-j <<endl;
        else
            cout << a[0] << " can not be classified after 15 iterations" <<endl;
    }
    return 0;

} 

原文地址:https://www.cnblogs.com/liuxin13/p/4383938.html