PAT乙级1001 题解

涉及知识:递归,循环

思路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;
}
上一篇:前端规范之路


下一篇:oracle rba一些小知识