题目描述:
已知数 n ,当 n 不等于1 时,如果 n 为奇数,n = n *3 +1 ,如果 n 为偶数,n = n/2 ,直到 n = 1 为止。记 n 从 n 开始经过上述变为 1 所经历的数的个数为 c。现 给出两个数a、b,从a 到 b 的所有数中,找出最大的数c,输出。
题目类型:
简单题。
源代码:
#include<iostream>
using namespace std;
int Judge(int a)
{
int num=1;
while(a!=1)
{
if(a%2==0)
a=a/2;
else
a=a*3+1;
num++;
}
return num;
}
int main()
{
int a,b;
int max,sum;
while(scanf("%d%d",&a,&b)!=EOF)
{
int temp;
cout<<a<<" "<<b<<" ";
if(a>b)
{
temp=a;
a=b;
b=temp;
}
max=-1;
for(int i=a;i<=b;i++)
{
sum=Judge(i); //曾出错的地方。。
if(max<sum) //如果不用sum,而是直接使用Judge(i),就不对了。。
max=sum;
}
cout<<max<<endl;
}
return 0;
}
关于找出 c 的另一种计数方式。
#include<iostream>
using namespace std;
int num=0;
int Judge(int a)
{
if(a==1)
num++;
else
{
if(a%2==0)
{
num++;
return Judge(a/2);
}
else if(a%2)
{
num++;
return Judge(a*3+1);
}
}
return num;
}
int main()
{
int a,b;
int max;
while(scanf("%d%d",&a,&b)!=EOF)
{
int temp;
cout<<a<<" "<<b<<" ";
if(a>b)
{
temp=a;
a=b;
b=temp;
}
num=0;
max=-1;
int sum;
for(int i=a;i<=b;i++)
{
sum=Judge(i);
if(max<sum)
max=sum;
num=0;
}
cout<<max<<endl;
}
return 0;
}