暑期训练(二)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);
}
}