您的位置:首页 > 其它

POJ 1016 循环数 字符串处理与英文理解

2010-11-22 20:07 417 查看
这题挺简单,但是题目稍微有点长,基本没什么算法。
#include <iostream>
#include <string>
using namespace std;
string transfer(string s){
	int num[10] = {0};
	char res[80];
	int i;
	int j = 0;
	for (i = 0 ; i < s.length() ; i++)
		num[s[i] - '0']++;
	for ( i = 0 ; i < 10; i++){
		if (num[i] > 0 && num[i] < 10)
		{
			res[j++] = num[i] + '0';
			res[j++] = i + '0';
		}
		else if(num[i] >= 10)
		{
			res[j++] = num[i]/10 + '0';
			res[j++] = num[i]%10 + '0';
			res[j++] = i + '0';
		}
	}
	res[j++] = '/0';
	return res;
} 
int main(){
	string s[20];
	int i,j;
	bool flag;//标记是否输出过
	while (1)
	{
		for (i = 0;i < 20; i++)
		{
			s[i] = "";
		}
		flag = false;
		cin>>s[0];
		if(s[0] == "-1") break;
		
		for( i = 0;i < 16; i++){
			s[i+1] = transfer(s[i]);
		}
		for (i = 0;i < 16 && (!flag); i++)
		{
			for (j = i+1;j<16 && (!flag);j++)
			{
				if (s[j] == s[i] && j == 1 && i == 0)
				{
					cout<<s[0]<<" is "<<"self-inventorying"<<endl;
					flag = true;
					break;
				}
				else if (s[j] == s[i] && j == i+1 && i != 0)
				{
					cout<<s[0]<<" is "<<"self-inventorying after "<<j-1<<" steps"<<endl;
					flag = true;
					break;
				}
				else if (s[j] == s[i] && j != i+1)
				{
					cout<<s[0]<<" enters an inventory loop of length "<<(j - i)<<endl;
					flag = true;
					break;
				}
			}
		}
		if (!flag)
		{
			cout<<s[0]<<" can not be classified after 15 iterations"<<endl;
		}
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: