Encuentre el número mínimo de pasos para llegar a M desde N

Dados dos enteros N y M . La tarea es encontrar el número mínimo de pasos para llegar a M desde N realizando las operaciones dadas. 
 

  1. Multiplica un número x por 2. Entonces, x se convierte en 2*x.
  2. Resta uno del número x. Entonces, x se convierte en x-1.

Ejemplos: 
 

Input : N = 4, M = 6
Output : 2
Explanation : Perform operation number 2 on N. 
So, N becomes 3 and then perform operation number 1. 
Then, N becomes 6. So, the minimum number of steps is 2. 

Input : N = 10, M = 1
Output : 9
Explanation : Perform operation number two 
9 times on N. Then N becomes 1.

Planteamiento
La idea es invertir el problema de la siguiente manera: Deberíamos obtener el número N a partir de M usando las operaciones: 
 

  1. Divide el número por 2 si es par.
  2. Suma 1 al número.

Ahora, el número mínimo de operaciones sería: 
 

  1. Si N > M, devuelve la diferencia entre ellos, es decir, el número de pasos será sumando 1 a M hasta que sea igual a N.
  2. De lo contrario, si N < M. 
    • Siga dividiendo M entre 2 hasta que sea menor que N. Si M es impar, primero agréguele 1 y luego divida entre 2. Una vez que M sea menor que N, agregue la diferencia entre ellos al conteo junto con el conteo de las operaciones anteriores. .

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// CPP program to find minimum number
// of steps to reach M from N
#include <bits/stdc++.h>
using namespace std;
 
// Function to find a minimum number
// of steps to reach M from N
int Minsteps(int n, int m)
{
    int ans = 0;
     
    // Continue till m is greater than n
    while(m > n)
    {
        // If m is odd
        if(m&1)
        {
            // add one
            m++;
            ans++;
        }
         
        // divide m by 2       
        m /= 2;
        ans++;
    }
     
    // Return the required answer
    return ans + n - m;
}
 
// Driver code
int main()
{
    int n = 4, m = 6;
    
    cout << Minsteps(n, m);
     
    return 0;
}

Java

// Java program to find minimum number
// of steps to reach M from N
class CFG
{
     
// Function to find a minimum number
// of steps to reach M from N
static int Minsteps(int n, int m)
{
    int ans = 0;
     
    // Continue till m is greater than n
    while(m > n)
    {
        // If m is odd
        if(m % 2 != 0)
        {
            // add one
            m++;
            ans++;
        }
         
        // divide m by 2    
        m /= 2;
        ans++;
    }
     
    // Return the required answer
    return ans + n - m;
}
 
// Driver code
public static void main(String[] args)
{
    int n = 4, m = 6;
     
    System.out.println(Minsteps(n, m));
}
}
 
// This code is contributed by Code_Mech

Python3

# Python3 program to find minimum number
# of steps to reach M from N
 
# Function to find a minimum number
# of steps to reach M from N
def Minsteps(n, m):
 
    ans = 0
     
    # Continue till m is greater than n
    while(m > n):
 
        # If m is odd
        if(m & 1):
             
            # add one
            m += 1
            ans += 1
         
        # divide m by 2    
        m //= 2
        ans += 1
     
    # Return the required answer
    return ans + n - m
 
# Driver code
n = 4
m = 6
 
print(Minsteps(n, m))
 
# This code is contributed by mohit kumar

C#

// C# program to find minimum number
// of steps to reach M from N
using System;
 
class GFG
{
     
// Function to find a minimum number
// of steps to reach M from N
static int Minsteps(int n, int m)
{
    int ans = 0;
     
    // Continue till m is greater than n
    while(m > n)
    {
        // If m is odd
        if(m % 2 != 0)
        {
            // add one
            m++;
            ans++;
        }
         
        // divide m by 2    
        m /= 2;
        ans++;
    }
     
    // Return the required answer
    return ans + n - m;
}
 
// Driver code
public static void Main()
{
    int n = 4, m = 6;
     
    Console.WriteLine(Minsteps(n, m));
}
}
 
// This code is contributed
// by Akanksha Rai

PHP

<?php
// PHP program to find minimum number
// of steps to reach M from N
 
// Function to find a minimum number
// of steps to reach M from N
function Minsteps($n, $m)
{
    $ans = 0;
     
    // Continue till m is greater than n
    while($m > $n)
    {
        // If m is odd
        if($m % 2 != 0)
        {
            // add one
            $m++;
            $ans++;
        }
         
        // divide m by 2    
        $m /= 2;
        $ans++;
    }
     
    // Return the required answer
    return $ans + $n - $m;
}
 
// Driver code
$n = 4; $m = 6;
 
echo(Minsteps($n, $m));
 
// This code is contributed by Code_Mech
?>

Javascript

<script>
// JavaScript program to find minimum number
// of steps to reach M from N
 
// Function to find a minimum number
// of steps to reach M from N
function Minsteps(n, m)
{
    let ans = 0;
     
    // Continue till m is greater than n
    while(m > n)
    {
        // If m is odd
        if(m&1)
        {
            // add one
            m++;
            ans++;
        }
         
        // divide m by 2       
        m = Math.floor(m / 2);
        ans++;
    }
     
    // Return the required answer
    return ans + n - m;
}
 
// Driver code
    let n = 4, m = 6;   
    document.write(Minsteps(n, m));
 
// This code is contributed by Surbhi Tyagi.
</script>
Producción: 

2

 

Complejidad de tiempo: O (log 2 m)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por pawan_asipu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *