📜  TCS NQT 2020 |火车

📅  最后修改于: 2021-05-14 01:48:15             🧑  作者: Mango

问题:

一次火车A可以在时间T [0]从源站点开始,在每个站点停顿h个时间单位,直到它在时间T [N – 1]到达最后一个站点,其中N为正整数,表示总站数。

给定,火车A在每个时间单位的计时为T [] = {10.00,10.04,10.09,10.15,10.19,10.22}

现在,假设Railway Admin想要添加更多的火车来增加频率。因此,要发射与火车A相同的其他火车B。如果火车B在时间t出发,他们想知道火车B的时刻。程序应返回String数组S (从第一个车站到最后一个车站(如火车A )的每个车站的火车B的时间戳记(浮动)。

笔记:

  • 时间以24小时表示。
  • 开始时间应在[0,23]范围内。
  • 开始分钟数应在[0,59]范围内。
  • 输入开始时间(24小时)

例子:

方法:想法是从给定的火车A时刻计算站点之间的时差。按照以下步骤解决问题:

  • 从给定的数组T []生成一个数组train_B [] ,其中train_B [i]是T [i]T [i – 1]之间的时间差,其中train_B [0] = 0.001≤i≤5。
  • 因此, train_B [] = {0.00,0.04,0.05,0.06,0.04,0.03}
  • 如果t的整数部分不在[0,24]范围内,或者t的小数部分不在[0,60]范围内,则打印“无效输入”,因为整数部分代表小时和小数部分代表分钟。
  • 否则,遍历范围[ 0,5]并打印t + train_B [i],表示第i车站的火车B的时间。然后将t更新为t = t + train_B [i]

下面是上述方法的实现:

C
// C program for the above approach
  
#include 
#include 
  
// 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

时间复杂度: O(1)
辅助空间: O(1)