Se le da un candado que se compone de n-anillos circulares diferentes y cada anillo tiene 0-9 dígitos impresos en serie. Inicialmente, todos los anillos n juntos muestran un número entero de n dígitos, pero solo hay un código particular que puede abrir la cerradura. Puede rotar cada anillo cualquier número de veces en cualquier dirección. Tienes que encontrar el número mínimo de rotaciones realizadas en los anillos de la cerradura para abrir la cerradura.
Ejemplos:
Input : Input = 2345, Unlock code = 5432 Output : Rotations required = 8 Explanation : 1st ring is rotated thrice as 2->3->4->5 2nd ring is rotated once as 3->4 3rd ring is rotated once as 4->3 4th ring is rotated thrice as 5->4->3->2 Input : Input = 1919, Unlock code = 0000 Output : Rotations required = 4 Explanation : 1st ring is rotated once as 1->0 2nd ring is rotated once as 9->0 3rd ring is rotated once as 1->0 4th ring is rotated once as 9->0
Para un solo anillo, podemos girarlo en cualquiera de las dos direcciones hacia adelante o hacia atrás como:
- 0->1->2….->9->0
- 9->8->….0->9
Pero lo que nos preocupa es el número mínimo de rotaciones requeridas, por lo que debemos elegir min (abs(ab), 10-abs(ab)) ya que ab denota el número de rotaciones hacia adelante y 10-abs(ab) denota el número de rotaciones hacia atrás para un anillo para rotar de a a b. Además, tenemos que encontrar el número mínimo para cada anillo que es para cada dígito. Entonces, comenzando desde el dígito más a la derecha, podemos encontrar fácilmente el número mínimo de rotación requerido para cada anillo y terminar en el dígito más a la izquierda.
C++
// CPP program for min rotation to unlock #include <bits/stdc++.h> using namespace std; // function for min rotation int minRotation(int input, int unlock_code) { int rotation = 0; int input_digit, code_digit; // iterate till input and unlock code become 0 while (input || unlock_code) { // input and unlock last digit as reminder input_digit = input % 10; code_digit = unlock_code % 10; // find min rotation rotation += min(abs(input_digit - code_digit), 10 - abs(input_digit - code_digit)); // update code and input input /= 10; unlock_code /= 10; } return rotation; } // driver code int main() { int input = 28756; int unlock_code = 98234; cout << "Minimum Rotation = " << minRotation(input, unlock_code); return 0; }
Java
// Java program for min rotation to unlock class GFG { // function for min rotation static int minRotation(int input, int unlock_code) { int rotation = 0; int input_digit, code_digit; // iterate till input and unlock code become 0 while (input>0 || unlock_code>0) { // input and unlock last digit as reminder input_digit = input % 10; code_digit = unlock_code % 10; // find min rotation rotation += Math.min(Math.abs(input_digit - code_digit), 10 - Math.abs( input_digit - code_digit)); // update code and input input /= 10; unlock_code /= 10; } return rotation; } // driver code public static void main (String[] args) { int input = 28756; int unlock_code = 98234; System.out.println("Minimum Rotation = "+ minRotation(input, unlock_code)); } } /* This code is contributed by Mr. Somesh Awasthi */
Python3
# Python3 program for min rotation to unlock # function for min rotation def minRotation(input, unlock_code): rotation = 0; # iterate till input and unlock # code become 0 while (input > 0 or unlock_code > 0): # input and unlock last digit # as reminder input_digit = input % 10; code_digit = unlock_code % 10; # find min rotation rotation += min(abs(input_digit - code_digit), 10 - abs(input_digit - code_digit)); # update code and input input = int(input / 10); unlock_code = int(unlock_code / 10); return rotation; # Driver Code input = 28756; unlock_code = 98234; print("Minimum Rotation =", minRotation(input, unlock_code)); # This code is contributed by mits
C#
// C# program for min rotation to unlock using System; class GFG { // function for min rotation static int minRotation(int input, int unlock_code) { int rotation = 0; int input_digit, code_digit; // iterate till input and // unlock code become 0 while (input > 0 || unlock_code > 0) { // input and unlock last // digit as reminder input_digit = input % 10; code_digit = unlock_code % 10; // find min rotation rotation += Math.Min(Math.Abs(input_digit - code_digit), 10 - Math.Abs( input_digit - code_digit)); // update code and input input /= 10; unlock_code /= 10; } return rotation; } // Driver Code public static void Main () { int input = 28756; int unlock_code = 98234; Console.Write("Minimum Rotation = "+ minRotation(input, unlock_code)); } } // This code is contributed by Nitin Mittal
PHP
<?php // PHP program for min // rotation to unlock // function for min rotation function minRotation($input, $unlock_code) { $rotation = 0; $input_digit; $code_digit; // iterate till input and // unlock code become 0 while ($input || $unlock_code) { // input and unlock last // digit as reminder $input_digit = $input % 10; $code_digit = $unlock_code % 10; // find min rotation $rotation += min(abs($input_digit - $code_digit), 10 - abs($input_digit - $code_digit)); // update code and input $input /= 10; $unlock_code /= 10; } return $rotation; } // Driver Code $input = 28756; $unlock_code = 98234; echo "Minimum Rotation = " , minRotation($input, $unlock_code); // This code is contributed by vt_m. ?>
Javascript
<script> // JavaScript program for min rotation to unlock // function for min rotation function minRotation(input, unlock_code) { let rotation = 0; let input_digit, code_digit; // iterate till input and unlock code become 0 while (input>0 || unlock_code>0) { // input and unlock last digit as reminder input_digit = input % 10; code_digit = unlock_code % 10; // find min rotation rotation += Math.min(Math.abs(input_digit - code_digit), 10 - Math.abs( input_digit - code_digit)); // update code and input input = Math.floor(input / 10); unlock_code = Math.floor(unlock_code / 10); } return rotation; } // Driver Code let input = 28756; let unlock_code = 98234; document.write("Minimum Rotation = "+ minRotation(input, unlock_code)); </script>
Producción:
Minimum Rotation = 12
Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA