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.
- Multiplica un número x por 2. Entonces, x se convierte en 2*x.
- 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:
- Divide el número por 2 si es par.
- Suma 1 al número.
Ahora, el número mínimo de operaciones sería:
- 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.
- 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