对于一个整数n,如果n为偶数,则除以二,如果n为奇数,则乘三加一。
输入输出格式
输入格式:
共一行,两个整数,m,n。
输出格式:
每行一个整数,输出所有经过n次操作(见题目描述)能得到m的正整数。(从小到大)
我的代码,望改正,或重制(不穷举)
#include<bits/stdc++.h>
using namespace std;
int m,n;
double po;
bool everr=false;
bool pd(double a)
{
if(a-int(a)==0)return true;
else return false;
}
bool jo(int a)
{
if(a%2==0)return true;
else return false;
}
void doo(double z,int sum)
{
if(everr==false){sum=0;everr=true;}
if(pd(z)&&z!=0&&sum==n)
printf("%f\n",z);
else if(pd(z)&&sum<n)
{
if(jo(z))
{
if(pd(z/2))doo(z/2,sum+1);
if(pd((z-1)/3))doo((z-1)/3,sum+1);
}
if(!jo(z))
if(pd(z*2))doo(z*2,sum+1);
}
}
int main()
{
scanf("%d%d",&m,&n);
if(m==1)po=pow(2,n);
else if(m==0)return 0;
else po=pow(m,n);
doo(m,0);
return 0;
}