题意
有两个数n和m,每次可以对n进行乘2处理或者减1处理,问最少多少次可以把a变成b。
思路
我们可以通过逆向思维,看如何把m变成n。所以就会有除以2和加1两种操作。m除以2则m会变小,m加1则m会变大。当每次操作时有两种情况。第一种是n>m时,m变成n要变大,就要一直加1。第二种是n<m的情况:此时就要让m进行除以2操作,所以当m为偶数的时候,直接除以2;当m为奇数的时候要先进行一次加1操作变成偶数再进行除以二操作。
#include<iostream>
using namespace std;
int main()
{
int n,m;
int s=0;
cin>>n>>m;
while(n!=m)
{
s++;
if(n<m)
{
if(m%2!=0)
{
m++;
}
else
{
m/=2;
}
}
else
m++;
}
cout<<s;
return 0;
}