TCS NQT 2020 | Trenes

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;
}
Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *