增长与翻倍
内存限制: 256 Mb时间限制: 1000 ms
题目描述
给定正整数s和t,我们希望利用增长与翻倍的操作,让s变成t。一步增长可以让数字加一,一步翻倍可以让数字翻倍。最少需要用多少步操作才能将s 变成t?,保证s<t。
输入格式
两个整数,分别表示s与t。
输出格式
单个整数:表示最少操作步数。
数据范围
- 对于 50%50% 的数据,1≤�<�≤1001≤s<t≤100;
- 对于 100%100% 的数据,1≤�<�≤1,000,000,0001≤s<t≤1,000,000,000;
样例数据
输入:
1 4
输出:
2
说明:
1->2->4
输入:
2 10
输出:
3
说明:
2->4->5->10
思路:
逆向思维
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int s,b;
cin>>s>>b;
int ans = 0;
while(b != s)
{
if(b % 2 == 0 && b / 2 >= s)
{
b /= 2;
}
else
{
b -= 1;
}
ans++;
}
cout<<ans;
return 0;
}