📜  TCS NQT 2020 |火车

📅  最后修改于: 2021-09-06 06:26:54             🧑  作者: Mango

问题:

在一次传递中,列车 A可以在时间 T[0]从源站出发,在每个站停止h单位时间,直到在时间T[N – 1]到达最后一个站,其中N是正整数表示总站数。

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

现在,假设铁路管理员想要添加更多列车以增加频率。因此,要在与 A 列车相同的车站启动其他列车 B 。如果列车 B在时间t开始,他们想知道列车 B的时间。程序应该返回一个字符串数组S (时间戳(浮点数)在每个车站从第一个车站到最后一个车站的列车 B ,如列车 A )。

笔记:

  • 时间以 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]范围内,则打印“Invalid Input”,因为整数部分代表小时和小数部分代表分钟。
  • 否则,遍历范围[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)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live