数字转换机

题目描述

 

小Q从牛博士那里获得了一个数字转换机,这台数字转换机必须同时输入两个正数a和b,并且这台数字转换机有一个红色的按钮和一个蓝色的按钮:

当按下了红色按钮,两个数字同时加1。

当按下了蓝色按钮,两个数字同时乘2。

小Q现在手中有四个整数a,b,A,B,他希望将输入的两个整数a和b变成A,B(a对应A,b对应B)。因为牛博士允许小Q使用数字转换机的时间有限,所以小Q希望按动按钮的次数越少越好。请你帮帮小Q吧。

 

 

 

输入描述:

输入包括一行,一行中有四个正整数a,b,A,B,(1≤a,b,A,B≤10^9)。

输出描述:

如果小Q可以完成转换,输出最少需要按动按钮的次数,否则输出-1。

示例1

输入

100 1000 202 2002

输出

2

 

 

递归(深度搜索)

 

 

#include<iostream>
#include<algorithm>
using namespace std;

int ans = -1;

void solve(int a, int b, int A, int B, int cnt)
{
    if(a >= A || b >= B)
    {
        if(a == A && b == B)
        {
            if(ans == -1)
                ans = cnt;
            else
                ans = min(ans, cnt);
        }
        return ;
    }
    for(int i = 0; i < 2; ++i)
    {
        if(i == 0)
            solve(a + 1, b + 1, A, B, cnt+1);
        else
            solve(a * 2, b * 2, A, B, cnt+1);
    }
    return ;
}

int main()
{
    int a,b,A,B;
    cin >> a >> b >> A >> B;
    solve(a, b, A, B, 0);
    cout << ans << endl;
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值