解题思路:从m到n一个一个遍历然后进行比较大小,最后输出最大值.
注意事项:在for循环哪里要创建一个中间变量j来保存i的值,再进行遍历。不能直接用i,最后会i一直为1进入一个死循环。

参考代码:

#include <iostream>

using namespace std;

int main()

{

    int m,n;

    while(cin>>m>>n)//循环输入

    {

        int max=0;//中间比较数

        cout<<m<<" "<<n<<" ";

        if(m>n)//判断m,n的大小,使得m<n。

        {

            int t=m;

            m=n;

            n=t;

        }

        for(int j=m; j<=n; j++)//从m到n一个一个遍历

        {

            int sum=1;//记录每次遍历的次数

            int i=j;

            while(i!=1)//判断停止条件

            {

                if(i%2==0)

                {

                    i=i/2;

                    sum++;//次数++

                }

                else

                {

                    i=i*3+1;

                    sum++;//次数++

                }

            }

            if(sum>max)//每次的次数与前面的最大作比较

                max=sum;

        }

        cout<<max<<endl;//输出最大的次数

    }

    return 0;

}


点赞(0)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

紫色潜影贝 1年前 回复TA
你这时间不超限么
ikun 2年前 回复TA
@决明子 输入案例里i可能大于j,需要自己判断一下,然后最后输出的顺序还是按照输入的i,j顺序
cugnanan 3年前 回复TA
@决明子 虽然我也不知道为什么,但是我跟你差不多,需要把倒数第二行的cout<<p<<"  "<<j<<"  "<<max2<<endl;拆开为cout<<p<<"  "<<j<<"  ";和cout<<max2<<endl;前者放在while下一行,后者在原位置,希望你解决后告诉我是为什么
决明子 3年前 回复TA
@决明子 解决了
决明子 3年前 回复TA
用了long long 直接输出i j 都不行

#include<iostream>
using namespace std;
int fun(long long int k)
{
    if(k%2!=0)
	k=k*3+1;
	else
	k=k/2;
	return k;
}
int fun2(long long int k)
{
	long long int sum=1;
	while(k!=1)
	{
	k=fun(k);
	sum++;
		}
	return sum;
}

int main()
{
	long long int i,j;
	long long int p,max=0,max2=0;
	while(cin>>i>>j)
	{
		cout<<i<<" "<<j<<" ";
		if(i>j)
		{
			i=p;
			i=j;
			j=p;	
		}
		while(i<=j)
		{
		if(max2<max)
		max2=max;
		max=fun2(i);
		i++;
		}
		cout<<max2<<endl;
		max=max2=0;
	}
	
}
决明子 3年前 回复TA
求大佬解答,这个样例都能通过,有什么特殊情况吗?

#include<iostream>
using namespace std;
int fun(int k)
{
    if(k%2!=0)
	k=k*3+1;
	else
	k=k/2;
	return k;
}
int fun2(int k)
{
	int sum=1;
	while(k!=1)
	{
	k=fun(k);
	sum++;
		}
	return sum;
}

int main()
{
	int i,j,p,max2=0,max=0;
	while(cin>>i>>j)
	{
	    p=i;
		while(i<=j)
		{
		if(max2<max)
		max2=max;
		max=fun2(i);
		i++;
		}
		cout<<p<<"  "<<j<<"  "<<max2<<endl;
		max=max2=0;
	}
	
}