原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复