poj-1016 C++标准库(string)的代码(优雅)体现的淋漓精致啊

8 篇文章 0 订阅

贴这个代码纯碎是为了表达c++真的很优美 


#include <iostream>

#include <cstring>

using namespace std;

string str[16];

void process(string input ,int index)

{

   if(index==16return;

   int number[10]={0 };

   for(int i=0;i<input.length();i++)

    {

        number[input[i]-'0']++;

    }

    string temp;

   for(int i=0;i<10;i++)

    {

       if(number[i]>0)

        {

           if(number[i]<10)

            {

                temp.insert(temp.end(),number[i]+'0');

            }

           else

            {

                temp.insert(temp.end(),number[i]/10+'0');

                temp.insert(temp.end(),number[i]%10+'0');

            }

            temp.insert(temp.end(), i+'0');

        }

    }

    str[index]=temp;

    process(temp,index+1);

}

int find_loop(int index)

{

   for(int i=index+1;i<16;i++)

    {

       if(str[index]==str[i])

        {

           return i-index;

        }

    }

   return 0;

}

int main()

{

    string input;

   while(cin>>input)

    {

       if(input=="-1")break;

        str[0]=input;

        process(input,1);


       bool after = false;

       if(str[0]==str[1])

        {

            cout<<input<<" is self-inventorying" << endl;

        }

       else

        {

           for(int i=1;i<=15;i++)

            {

               if(str[i]==str[i-1])

                {

                    after=true;

                    cout << input <<" is self-inventorying after " << i-1 <<" steps" << endl;

                   break;

                }

            }

           int loop=0;

           if(!after)

            {

               for(int i=0;i<=15;i++)

                {

                    loop=find_loop(i);

                   if(loop>0)

                    {

                        cout << input <<" enters an inventory loop of length "<< loop << endl;

                       break;

                    }

                }

            }

           if(!after&&loop==0)

            {

                cout << input << " can not be classified after 15 iterations" << endl;

            }

        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值