天天看點

1177

#include <iostream>
#include <vector>
using namespace std;
const int N = 10000;
int M[N];

int judge(int n)
{
	int count = 1;
	while(n!=1)
	{
		if(n%2==0)
			n /= 2;
		else
			n = 3*n+1;
		count++;
	}
	return count;
}

int mmax(int a, int b)
{
	int c = -1;
	if(a>b)
	{
		c = a;
		a = b;
		b = c;
	}
	c = -1;
	for(int i=a;i<=b;i++)
	{
		if(c<M[i])
			c = M[i];
	}
	return c;
}

int main()
{
	for(int i=1;i<N;i++)
		M[i] = judge(i);

	int a,b;
	vector<int> ivec;
	while(cin>>a>>b)
		ivec.push_back(mmax(a,b));
	vector<int>::const_iterator iter = ivec.begin();
	while(iter != ivec.end())
		cout<<*iter++<<endl;
	return 0;
}
           

----------------

#include <iostream>
#include <vector>
using namespace std;
const int N = 10000;
int M[N];

void init()
{
	M[0]=0;
	M[1]=1;
	for(int i=2;i<N;i++)
	{
		int c=1;
		int n=i;
		while(true)
		{
			if(n<i)
			{
				c--;
				c+=M[n];
				M[i]=c;
				break;
			}
			else
			{
				if(n%2==0)
					n=n/2;
				else
					n=3*n+1;
				c++;
			}
		}
	}
}

int mmax(int a, int b)
{
	int c = -1;
	if(a>b)
	{
		c = a;
		a = b;
		b = c;
	}
	c = -1;
	for(int i=a;i<=b;i++)
	{
		if(c<M[i])
			c = M[i];
	}
	return c;
}

int main()
{
	init();
	int a,b;
	vector<int> ivec;
	while(cin>>a>>b)
		ivec.push_back(mmax(a,b));
	vector<int>::const_iterator iter = ivec.begin();
	while(iter != ivec.end())
		cout<<*iter++<<endl;
	return 0;
}