解题思路:明明写的很对,可就是错误33%,查了两小时的资料,终于知道问题出在哪里了!

注意事项:输入i,j时,并不知道大小情况,所以输入后需要比较一次,但是输出时,如果在最后输出,那可能输出的是比较大小以后的i,j,即i如果大于j,输出时i,j将换位置。所以必须要在刚输入未比较大小时就将i,j输出。杭电的题目对细节要求可以说是很高了。

参考代码:错误33%的代码:

#include <iostream>

using namespace std;

int main(){

int i,j,t=0,k=0,max=0;

while(cin>>i>>j && i>0 &&j>0){

if(i>j){max=i;i=j;j=max;}

max=0;

for(int a=i;a<=j;a++){

k=0;

t=a;

 while(t!=1){

 if(t%2==0){

t=t/2;

k++;}

 else{

t=t*3+1;

k++;}

 }

 k++;

if(k>max)

max=k;

}

cout<<i<<' '<<j<<' '<<max<<endl;

}

return 0;

}


改正以后的:

#include <iostream>

using namespace std;

int main(){

int i,j,t=0,k=0,max=0;

while(cin>>i>>j && i>0 &&j>0){

cout<<i<<' '<<j<<' ';

if(i>j){max=i;i=j;j=max;}

max=0;

for(int a=i;a<=j;a++){

k=0;

t=a;

 while(t!=1){

 if(t%2==0){

t=t/2;

k++;}

 else{

t=t*3+1;

k++;}

 }

 k++;

if(k>max)

max=k;

}

cout<<max<<endl;

}

return 0;

}


点赞(1)
 

0.0分

17 人评分

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

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

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

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

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

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

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

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

评论列表 共有 16 条评论

cugnanan 3年前 回复TA
逆天,太损了
lemonwsx 4年前 回复TA
谢谢大佬!  敬佩!!
啦啦啦啦 4年前 回复TA
@啦啦啦啦 没事了,是自己傻了,交换那里没写好没看出来
啦啦啦啦 4年前 回复TA
想请问下大佬下面的代码为什么是33%的错?
#include<iostream>
using namespace std;
int main()
{
	int i,j;
	while(cin>>i>>j&&i>0&&j>0)
	{
		cout<<i<<' '<<j<<' ';
		int tmp;
		if(i>j){
			tmp=i;
			i=j;
			j=i;
		}
		int max=0;
		for(int k=i;k<=j;k++){
			int a=k;
			int sum=1;
			while(a!=1){
				if(a%2==0){
					a/=2;
					sum++;
				}
				else{
					a=a*3+1;
					sum++;
				}
			}
			if(sum>max)max=sum;
		}
		cout<<max<<endl;
		
	}
	return 0;
}
是lxy 4年前 回复TA
太强了
foxnull2 4年前 回复TA
谢谢
阿狸大托尔 4年前 回复TA
流啤!
柞木有诗 5年前 回复TA
我tm怕不是个傻逼  我竟然把这个忘了
chenxizhan 5年前 回复TA
果然!!!
感谢大佬
yexiawuren 5年前 回复TA
感谢!!