UVA 100 The 3*n+1 problem

时间:2022-04-28 00:33:47

 

UVA 100 The 3*n+1 problem.

解题思路:对给定的边界m,n(m<n&&0<m,n<1 000 000);求X(m-1<X<n+1)进过操作至1的最大步数。

对m到n依次计算,比较获得最大步数。

注意:1.输入格式。

本题利用  while(scanf("%d %d",&m,&n)!=EOF) 

                {

                }

      2.输出与题给出相同。

3。对当边界为1<n<1 000 000时变量类型的选取。

代码如下:

#include <stdio.h>
#include <stdlib.h> void FindResult(int Min,int Max)
{
int i,count,temp;
temp=; //temp存放最大步数
long long n; //注意这n类型为long long型,当这为int时,计算837799溢出
for(i=Min;i<=Max;i++)
{
n=i;
count=;
while()
{
if(n==)
{
count++;
if(temp<count)
{
temp=count;
}
break;
}
if(n%==)
{
n=*n+;
count++;
}
else
{
n=n/;
count++;
}
} } printf("%d\n",temp);
} int main()
{
int MaxN,MinN,t; //MinN下界,MaxN为上界。
t=;
while(scanf("%d %d",&MinN,&MaxN)!=EOF)
{
printf("%d %d ",MinN,MaxN);
if(MinN>MaxN)
{
t=MinN;
MinN=MaxN;
MaxN=t; }
FindResult(MinN,MaxN); //计算最大步数 }
return ;
}

以上代码不足之处请指出,谢谢

如果有更好的方法,望不吝赐教,大家相互学习进步。