Problema:
En una pasada, el tren A puede partir de la estación de origen en el tiempo T[0] , detenerse en cada estación durante h unidad de tiempo hasta llegar a la última estación en el tiempo T[N – 1] , donde N es el número entero positivo que representa un número total de estaciones.
Dados, los tiempos de Train A en cada unidad de tiempo como T[] = {10.00, 10.04, 10.09, 10.15, 10.19, 10.22} .
Ahora, supongamos que Railway Admin desea agregar más trenes para aumentar la frecuencia. Entonces, para lanzar otro Tren B , para las mismas estaciones que el Tren A. Siempre que el Tren B comience a la hora t , les gustaría saber los horarios del Tren B . El programa debe devolver una array de strings S (marca de tiempo (en flotante ) para el tren B en cada estación desde la primera hasta la última estación como el tren A ).
Nota:
- El tiempo se representa en 24 horas.
- Hora de inicio debe estar en el rango [0, 23] .
- El minuto de inicio debe estar en el rango [0, 59] .
- Ingrese la hora de inicio (24 horas)
Ejemplos:
Entrada: t = 11.00
Salida: 11.00 11.04 11.09 11.15 11.19 11.22
Explicación: La hora de inicio del tren B es a las 11.00 y también la diferencia horaria entre las estaciones del tren B es la misma que la del tren A.Entrada: t = -26,15
Salida: Entrada no válida
Explicación: No existe un tiempo como -26,15. Por lo tanto, imprima «Entrada no válida».
Enfoque: La idea es calcular las diferencias de tiempo entre las estaciones a partir de los tiempos dados del Tren A. Siga los pasos a continuación para resolver el problema:
- A partir de la array dada T[] , genere una array tren_B[] donde tren_B[i] es la diferencia de tiempo entre T[i] y T[i – 1] , donde tren_B[0] = 0,00 y 1 ≤ i ≤ 5.
- Por lo tanto, train_B[] = {0.00, 0.04, 0.05, 0.06, 0.04, 0.03} .
- Si la parte entera de t no está en el rango [0, 24] o la parte decimal de t no está en el rango [0, 60] , imprima «Entrada no válida» porque la parte entera representa las horas y la parte decimal representa los minutos.
- De lo contrario, recorra el rango [0, 5] e imprima t + tren_B[i] que denota el tiempo del tren B para la i -ésima estación. Luego actualice t como t = t + train_B[i] .
A continuación se muestra la implementación del enfoque anterior:
C
// C program for the above approach #include <stdio.h> #include <string.h> // Function to find the timings for // train B having same time difference // as train_A void findTime(float train_A[], int N, float t) { float x; // Stores the time for train_B float train_B[N]; train_B[0] = 0.00; for (int i = 1; i < N; i++) { train_B[i] = train_A[i] - train_A[i - 1]; } // Variables for typecasting int it, ix; it = (int)t; // Check if t is valid if (t >= 0.0 && t <= 24.0 && (t - it) <= 60.0) { // Traverse from 0 to 5 for (int i = 0; i < 6; i++) { // Update t x = t + train_B[i]; ix = (int)x; if (x - ix >= 0.60) x = x + 0.40; if (x > 24.00) x = x - 24.0; // Print the current time printf("%.2f ", x); t = x; } } // If no answer exist else { printf("Invalid Input"); } } // Driver Code int main() { // Given timings of train A // at each station float train_A[] = { 10.00, 10.04, 10.09, 10.15, 10.19, 10.22 }; int N = sizeof(train_A) / sizeof(train_A[0]); // Given start time t float t = 11.00; // Function Call findTime(train_A, N, t); return 0; }
11.00 11.04 11.09 11.15 11.19 11.22
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por anushagoel21 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA