解题思路:
对于3n+1问题得到序列的长度我们可以用一个递归解决。
题目没有说明输入的个数,因此需要流结束符来结束程序。
题目要求算出i和j之间的最大值,因此需要用一个for循环。
注意事项:
输入的a和b没有大小顺序,这点卡了我很久才发现的。
参考代码:
#include<stdio.h> int fun(int i){ if(i==1)return 1;//递归出口 else { if(i%2==0)i=i/2; else i=i*3+1; return fun(i)+1; } } int main() { int a,b,max,i,r; int s,e; while(~scanf("%d%d",&a,&b))//接受到流结束符结束 { if(a>b)//把小值赋给s,大值赋给e { s=b;e=a; } else { s=a;e=b; } max=0; for(i=s;i<=e;i++)//逐个算出i和j之间每个数的序列长度 { r=fun(i); if(r>max)max=r;//取其中最大值 } printf("%d %d %d\n",a,b,max);//按要求输出 } return 0; }
0.0分
6 人评分
麻烦高手帮我看看,问题出在哪里?在线测试都是对的,就是提交出问题 #include<stdio.h> int main() { long a,b,i,temp,max; while(~scanf("%d%d",&a,&b)){ if (a>b) { temp=a;a=b;b=temp;} max=0; for (i=a;i<=b;i++){ long long v=i; int count=1; while (v!=1){ if (v%2==0) {v/=2;count++;} else {v*=3,v++;count++;} } if (count>max) max =count; } printf("%ld %ld %ld\n",a,b,max); } return 0; }
点我有惊喜!你懂得!浏览:2115 |
点我有惊喜!你懂得!浏览:2248 |
矩形面积交 (Java代码)浏览:1281 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:481 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:778 |
最长单词 (C语言代码)浏览:1474 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:751 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:597 |
1017题解浏览:663 |
sizeof的大作用 (C语言代码)浏览:1593 |