链接:
https://codeforces.com/problemset/problem/520/B
题意
有一个装置,上面有一个红按钮,一个蓝按钮和一个数字n。
如果按红色,数字会*2;
如果按蓝色,数字会-1;
现在再输入一个m,问从n到m最少按多少次按钮?
1 ≤ n, m ≤ 104
Example
input
4 6
output
2
input
10 1
output
9
解析
这题可以用逆向思维,题目求的是n到m最少需要多少步,每次就是要么乘2,要么减1;那么如果反过来,从m推回n,每次就是要么除2,要么加1。
然后如果n > m,那m就只能按蓝色按钮了,结果就是n-m
如果n <= m,那m每次判断是不是奇数,如果是奇数,就加1,偶数就除2,然后这中间记次数就行。
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int cnt = 0;
int t = m;
for (; n < t;)
{
if (t & 1)
{
t++;
cnt++;
}
t /= 2;
cnt++;
}
cnt += n - t;
cout << cnt;
return 0;
}