原题链接:The 3n + 1 problem
解题思路:
a.当输入的n是偶数时,做除以2操作
b.当输入的n是奇数时,做乘3加1操作
1.输入两个整数 i,j;
2.比较两个数的大小,从小到大循环,进行上述运算(a.b.)
3.统计i到j中每个数的循环的次数
4.比较,输出i,j及大的循环次数。
注意事项:
笔者我第一次没看懂两个地方:
1.要做循环从小到大,得出最大的。我第一次只做了两个(i,j)
2.还要比较i,j的大小,不一定i就是小的,j就是大的;反着来也要能输出正确答案(我是提交了然后没通过,很纳闷,看了别人的讲解才懂了题目是啥意思,一度还怀疑是题目错了 (>_<''))
3.小伙伴们一定要看清楚题目再敲代码呀,前期读懂题目很重要,要不后面花很多时间去改。
参考代码:
下面是我的代码,大家可以讨论讨论,我希望能和大家一起进步,进大厂。加油,我当然会有不足之处,希望大家能友好提建议。
#include <stdio.h> int main() { int i,j,temp,c,b; int max=0,num=1; //num计数,max存值 while(scanf("%d%d",&i,&j)!=EOF) //循环输入 { if(i<j) { //比较i,j的大小,c存小的,b存大的 c=i;b=j; } else { c=j;b=i; } for(;c<=b;c++) //从小到大循环 { temp=c; while(temp!=1) //1为循环结束标志 { if(temp%2==0) { temp=temp/2; num++; } else { temp=temp*3+1; num++; } } num++; if(max<=num) //比较大小,保证max的值是最大的 { max=num; } num=0; } printf("%d %d %d\n",i,j,max); //输出 max=0; //这个语句非常重要,因为是循环输入,所以每组输出完,max归0,下组继续;如果少了它,max的值为上组的最大值,就会出错。 } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复