描述:
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
输入:
输入两个10000以内的正整数m和n
输出:
输出从m变化到n的最少次数
输入样例:
1 16
输出样例:
3
#include <stdio.h>
#include <stdlib.h>
int m,n,s=0,e=1,sum;
int x[10000]={0};
int q[10000];
int chu();
int search();
void jing(int n);
int main()
{
int y;
scanf("%d %d",&m,&n);
q[0]=m;
y=search();
printf("%d\n",y);
return 0;
}
int search()
{
int t;
while(1)
{
t=chu();
if(t==n)
return x[t];
sum=x[t];
if(t+1<=n&&x[t+1]==0)
{
jing(t+1);
x[t+1]=sum+1;
}
if(t*2<=n&&x[t*2]==0)
{
jing(t*2);
x[t*2]=sum+1;
}
if(t*t<=n&&x[t*t]==0)
{
jing(t*t);
x[t*t]=sum+1;
}
}
}
int chu()
{
int a;
a=q[s];
s++;
return a;
}
void jing(int n)
{
q[e]=n;
e++;
}