解题思路:明明写的很对,可就是错误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 人评分
#include <stdio.h> int main() { int i,j,count,max=0,t; while(scanf("%d %d",&i,&j)) { if(i>j){max=i;i=j;j=max;} max=0; printf("%d %d ",i,j); for(int a=i;a<=j;a++) { count=1; t=a; while(t!=1) { if(t%2==0) t=t/2; else t=t*3+1; count++; } if(max<count) max=count; } printf("%d\n",max); } return 0; } 有大佬可以帮我看看为什么上传显示答案错误吗?用DEV编译之后好像和答主一样啊?
李华 2019-11-17 00:02:57 |
scanf少了个!=EOF,代码有点问题,已解决,谢谢!
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:443 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:806 |
【蟠桃记】 (C语言代码)浏览:697 |
WU-输出九九乘法表 (C++代码)浏览:1853 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:1024 |
关于C语言变量位置的问题浏览:294 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:750 |
有关字符,字符串的输入输出函数说明浏览:498 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:612 |
震宇大神的杀毒软件 (C语言代码)浏览:1162 |