暑期训练(二)G-1对于一个数字n,如果它是偶数则n=n/2,否则n=n*3+1。

对于一个数字n,如果它是偶数则n=n/2,否则n=n*3+1

对于一个区间[l,r]中的数字,如果将其不停应用如上操作,直到其等于1为止。

问所需操作数最多的一个数字是多少?

Input

数据多测
每行输入一对数字l r
范围0<= l, r <= 10000

Output

对于每个区间,首先输出区间,然后输出区间中操作数最多的数字所需的操作数。

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174

 这道题的坑有好几个:

1.运算结果要加上本身那一次;

2.需要考虑0和1的情况;

3.需要考虑l>r的情况。(说了是区间,还要考虑是真的坑)

#include<stdio.h>
int div(int n)
{
	int num=1;
	if(n==0)
		num=0;
	while(n>1)
	{
		if(n%2==0)
			n/=2;
		else
			n=n*3+1;
		num++;
	}
	return num;
}
int main()
{
	int l,r;
	while(~scanf("%d%d",&l,&r))
	{
		int max=0,i;
		int *p,*q;
		p=&l;
		q=&r;
		if(l>r)
		{
			p=&r;
			q=&l;
		}
		for(i=*p;i<=*q;i++)
		{
			if(max<div(i))
				max=div(i);
		}
		printf("%d %d %d\n",l,r,max);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40685101/article/details/81156750