时间限制: C/C++语言1000MS ;其他语言3000MS
内存限制: C/C++语言65536KB ; 真他语言589824KB
题目描述:
假设有这样一个计算器,该计算器只有两个按钮, 按下第一按钮能使显示数值减少1,按下第二个按钮能使显示数值乘以2 , 当前显示数值为N,那么至少要按多少次按钮才能使显示编程M?
输入
输入两个整数N,M,1<N,M≤10^9.
输出
输出显示数值变成M的最少按按钮次数
样例输入
4 5
样例输出
3
个人做的C++答案
#include <iostream>
#include<math.h>
using namespace std;
int count;
int fun(int a,int b);
int fun2(int a,int b);
int main()
{
cout << "请输入两个整数!" << endl;
int N;
int M;
cin>>N;
cin>>M;
count=0;
fun(N,M);
cout<<count;
return 0;
}
int fun(int a, int b)
{
if(a>=b)
{count=a-b;
}
if(ceil(0.5*b)<=a&&a<b) //此时先乘后减肯定大于先减后乘,即1+2*a-b>a-0.5*b+1恒成立
{ if(b%2)
{b=b+1;
count=count+1;}
count=count+a-0.5*b+1;
}
else {
count=fun2(a,b);
}
return count;
}
int fun2(int a,int b)
{
if(b%2)
{b=b+1;
count=count+1;}
if(a<0.5*b)
{
if(a<0.5*0.5*b)
count+=fun2(a,0.5*b);
else {
count = 2+a+3*ceil(0.25*b)-b;
}
}
}