原题链接:The 3n + 1 problem
解题思路:
注意事项:
参考代码:
#include"bits/stdc++.h" using namespace std; int main(){ // 定义变量a, b, c和数组d,l用于记录步数 long long a,b,c,d[10000],l; // 循环读取输入的a和b while(cin>>a>>b){ // 初始化步数计数器为0 l=0; // 定义m和n用于存储a和b的最大值和最小值 int m,n; // 获取a和b中的最大值 m=max(a,b); // 获取a和b中的最小值 n=min(a,b); // 遍历从n到m的所有整数 for(int i=n;i<=m;i++){ // 将当前整数赋值给c c=i; // 初始化步数为1 int g=1; a: // 如果c等于1,则记录步数并继续下一个整数 if(c==1){ d[l]=g; l++; continue; } // 如果c是偶数,则将其除以2并增加步数 if(c%2==0){ c=c/2; g++; goto a; } // 如果c是奇数,则将其变为3倍加1并增加步数 if(c%2==1){ c=3*c+1; g++; goto a; } } // 对记录的步数进行排序 sort(d,d+l); // 输出a, b和最大步数 cout<<a<<" "<<b<<" "<<d[l-1]<<endl; } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复