题意
有两个数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;
}