首页 > 其他 > 详细

PAT乙级1001 题解

时间:2021-04-03 23:08:03      阅读:24      评论:0      收藏:0      [点我收藏+]

涉及知识:递归,循环

思路1:利用递归,递归条件:若是偶数,就n/2,若是奇数,就(3*n+1)/2,递归的终止条件就是n==1,需要一个计数变量a来计数n计算到1的步数,这里的计数变量a初始化不能在递归函数里定义,因为每一次递归会把a不断置0.
c++代码如下:

#include<iostream>
using namespace std;
int CR(int n,int a)
{

if(n==1)
{
return a;
}
if(n%2==0)
{
a++;
return CR(n/2,a);

}
else
{
a++;
return CR((3*n+1)/2,a);
}
}
int main()
{
int a=0;
int n;
cin>>n;
cout<<CR(n,a)<<endl;
}

思路二:利用循环,循环的条件是n!=1,记录n计算到1的步数
c++代码如下:

#include<iostream>
using namespace std;
int main()
{
int a=0;
int n;
cin>>n;
for(;n!=1;)//循环终止条件n==1
{
if(n%2==0)
{
a++;
n=n/2;
}
else
{
a++;
n=(3*n+1)/2;
}
}
cout<<a<<endl;
}

PAT乙级1001 题解

原文:https://www.cnblogs.com/SCPC-QACY/p/14615050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!