Dados tres enteros A , B y K . Inicialmente, la primera persona se adelantó a la segunda por K kms. En cada hora, la primera persona avanza A kms y la segunda persona avanza B kms. La tarea es imprimir el número de horas después de las cuales la segunda persona cruza la primera. Si es imposible hacerlo, imprima -1 .
Ejemplos:
Entrada: A = 4, B = 5, K = 1
Salida: 2
Inicialmente, la primera persona se adelantó 1 km.
Después de la primera hora, la primera y la segunda persona están en el mismo lugar.
Después de la segunda hora, la primera persona se adelanta a la primera en 1 km.Entrada: A = 6, B = 5, K = 1
Salida: -1
Un enfoque ingenuo es verificar linealmente cada hora e imprimir la n-ésima hora cuando la segunda persona se adelanta a la primera.
Un enfoque eficiente es resolver el problema matemáticamente. El número de horas será K / (B – A) + 1 cuando la segunda persona se adelante a la primera. Ya que necesitas recorrer K kms, por lo tanto el tiempo tomado será K / (B – A) donde B – A es la velocidad de la segunda persona con respecto a la primera persona. Si A ≥ B entonces no es posible que la segunda persona se cruce con la primera.
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; // Function to return the number of // hours for the second person to move ahead int findHours(int a, int b, int k) { if (a >= b) return -1; // Time taken to equalize int time = k / (b - a); // Time taken to move ahead time = time + 1; return time; } // Driver code int main() { int a = 4, b = 5, k = 1; cout << findHours(a, b, k); return 0; }
Java
// Java implementation of the above approach import java.io.*; class GFG { // Function to return the number of // hours for the second person to move ahead static int findHours(int a, int b, int k) { if (a >= b) return -1; // Time taken to equalize int time = k / (b - a); // Time taken to move ahead time = time + 1; return time; } // Driver code public static void main (String[] args) { int a = 4, b = 5, k = 1; System.out.println (findHours(a, b, k)); } } // The code is contributed by ajit..@23
Python3
# Python3 implementation of the above approach # Function to return the number of # hours for the second person to move ahead def findHours(a, b, k): if (a >= b): return -1 # Time taken to equalize time = k // (b - a) # Time taken to move ahead time = time + 1 return time # Driver code a = 4 b = 5 k = 1 print(findHours(a, b, k)) # This code is contributed by mohit kumar 29
C#
// C# implementation of the above approach using System; class GFG { // Function to return the number of // hours for the second person to move ahead static int findHours(int a, int b, int k) { if (a >= b) return -1; // Time taken to equalize int time = k / (b - a); // Time taken to move ahead time = time + 1; return time; } // Driver code static public void Main () { int a = 4, b = 5, k = 1; Console.Write(findHours(a, b, k)); } } // The code is contributed by ajit.
Javascript
<script> // Javascript implementation of the above approach // Function to return the number of hours // for the second person to move ahead function findHours(a, b, k) { if (a >= b) return -1; // Time taken to equalize let time = k / (b - a); // Time taken to move ahead time = time + 1; return time; } // Driver code let a = 4, b = 5, k = 1; document.write(findHours(a, b, k)); // This code is contributed by Mayank Tyagi </script>
2
Complejidad Temporal: O(1), ya que existe una operación aritmética básica que requiere un tiempo constante.
Espacio Auxiliar: O(1), ya que no se ha ocupado ningún espacio extra.