數字轉換機

題目描述

 

小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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章