解题思路:明明写的很对,可就是错误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;
}
0.0分
17 人评分
想请问下大佬下面的代码为什么是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; }
啦啦啦啦 2020-03-20 15:54:30 |
没事了,是自己傻了,交换那里没写好没看出来
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:596 |
C语言程序设计教程(第三版)课后习题9.4 (Java代码)浏览:1447 |
Pascal三角 (C语言代码)浏览:1252 |
WU-输入输出格式练习 (C++代码)浏览:1133 |
printf基础练习2 (C语言代码)浏览:690 |
【计算两点间的距离】 (C语言代码)浏览:1522 |
A+B for Input-Output Practice (V) (C语言代码)浏览:497 |
DNA (C语言代码)浏览:440 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:756 |