floor函数的反函数--回溯
/*f=3*i,g=|_i/2_|(下取整函数),**经过n此运算,将q转换为p* *
*auther:diaoxue */
#include <iostream>
using namespace std;
int n=4,i=0;
float p=4.0;
float q=15.0;
int x[4]={0};
void BackT(int i)
{
if(i>=n && q==p)
{
for(int j=0;j<n;j++)
cout<<x[j]<<"-";
cout<<endl;
cout<<"END!"<<endl;
}
if(q<p)
{
x[i]=1;
q=3*q;
BackT(i+1);
q/=3;
x[i]=0;
}
if(q>p)
{
q=(int)(q/2);//可以用floor函数
BackT(i+1);
q=2*q+1;//怎么得到原来的值,难道只能用一个变量保存q值吗
}
}
int main()
{
BackT(i);
return 0;
}