Dados dos enteros n y my a y b , en una sola operación n puede multiplicarse por a o por b . La tarea es convertir n en m con un número mínimo de operaciones dadas. Si es imposible convertir n en m con la operación dada, imprima -1.
Ejemplos:
Input: n = 120, m = 51840, a = 2, b = 3 Output: 7 120 * 2 * 2 * 2 * 2 * 3 * 3 * 3 = 51840 Input: n = 10, m = 50, a = 5, b = 7 Output: 1 10 * 5 = 50
En la publicación anterior , discutimos un enfoque usando la división.
En esta publicación, utilizaremos un enfoque que encuentra el número mínimo de operaciones usando la recursividad. La recursión constará de dos estados, siendo el número multiplicado por a o por b, y contando los pasos. El mínimo de ambos pasos será la respuesta.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; #define MAXN 10000000 // Function to find the minimum number of steps int minimumSteps(int n, int m, int a, int b) { // If n exceeds M if (n > m) return MAXN; // If N reaches the target if (n == m) return 0; // The minimum of both the states // will be the answer return min(1 + minimumSteps(n * a, m, a, b), 1 + minimumSteps(n * b, m, a, b)); } // Driver code int main() { int n = 120, m = 51840; int a = 2, b = 3; cout << minimumSteps(n, m, a, b); return 0; }
Java
// Java implementation of the above approach class GFG { static int MAXN = 10000000; // Function to find the minimum number of steps static int minimumSteps(int n, int m, int a, int b) { // If n exceeds M if (n > m) return MAXN; // If N reaches the target if (n == m) return 0; // The minimum of both the states // will be the answer return Math.min(1 + minimumSteps(n * a, m, a, b), 1 + minimumSteps(n * b, m, a, b)); } // Driver code public static void main (String[] args) { int n = 120, m = 51840; int a = 2, b = 3; System.out.println(minimumSteps(n, m, a, b)); } } // This code is contributed by ihritik
Python3
# Python 3 implementation of the # above approach MAXN = 10000000 # Function to find the minimum # number of steps def minimumSteps(n, m, a, b): # If n exceeds M if (n > m): return MAXN # If N reaches the target if (n == m): return 0 # The minimum of both the states # will be the answer return min(1 + minimumSteps(n * a, m, a, b), 1 + minimumSteps(n * b, m, a, b)) # Driver code if __name__ == '__main__': n = 120 m = 51840 a = 2 b = 3 print(minimumSteps(n, m, a, b)) # This code is contributed by # Surendra_Gangwar
C#
// C# implementation of the above approach using System; class GFG { static int MAXN = 10000000; // Function to find the minimum number of steps static int minimumSteps(int n, int m, int a, int b) { // If n exceeds M if (n > m) return MAXN; // If N reaches the target if (n == m) return 0; // The minimum of both the states // will be the answer return Math.Min(1 + minimumSteps(n * a, m, a, b), 1 + minimumSteps(n * b, m, a, b)); } // Driver code public static void Main () { int n = 120, m = 51840; int a = 2, b = 3; Console.WriteLine(minimumSteps(n, m, a, b)); } } // This code is contributed by ihritik
PHP
<?php // PHP implementation of the above approach $MAXN = 10000000; // Function to find the minimum number of steps function minimumSteps($n, $m, $a, $b) { global $MAXN; // If n exceeds M if ($n > $m) return $MAXN; // If N reaches the target if ($n == $m) return 0; // The minimum of both the states // will be the answer return min(1 + minimumSteps($n * $a, $m, $a, $b), 1 + minimumSteps($n * $b, $m, $a, $b)); } // Driver code $n = 120; $m = 51840; $a = 2; $b = 3; echo minimumSteps($n, $m, $a, $b); // This code is contributed by Akanksha Rai ?>
Javascript
<script> // javascript implementation of the above approach var MAXN = 10000000; // Function to find the minimum number of steps function minimumSteps(n , m , a , b) { // If n exceeds M if (n > m) return MAXN; // If N reaches the target if (n == m) return 0; // The minimum of both the states // will be the answer return Math.min(1 + minimumSteps(n * a, m, a, b), 1 + minimumSteps(n * b, m, a, b)); } // Driver code var n = 120, m = 51840; var a = 2, b = 3; document.write(minimumSteps(n, m, a, b)); // This code contributed by Rajput-Ji </script>
Producción:
7
Complejidad del Tiempo: O(m 2 )
Espacio Auxiliar: O(m 2 + MAXN)