欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-07 10:26:54
...

对于一个数字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);
	}
}