Problem:
In one pass, Train A can start from the source station at time T[0], halt at each station for h unit of time until it reaches the last station at time T[N – 1], where N is the positive integer representing a total number of stations.
Given, Train A’s timings at each unit of time as T[] = {10.00, 10.04, 10.09, 10.15, 10.19, 10.22}.
Now, suppose Railway Admin wants to add more trains to increase the frequency. So, to launch other Train B, for the same stations as of Train A’s. Provided the Train B starts at time t, they would like to know the timings for Train B. The program should return a String array S (timestamp(in float) for Train B at each station from first to the last station like train A).
Note:
- The time is represented in 24-Hour.
- Start Hour should be in the range [0, 23].
- Start Minute should be in the range [0, 59].
- Enter start time(24 Hrs)
Examples:
Input: t = 11.00
Output: 11.00 11.04 11.09 11.15 11.19 11.22
Explanation: Start time for train B is 11.00 and also the time difference between the stations for train B is same as for train A.Input: t = -26.15
Output: Invalid Input
Explanation: No such time as -26.15 exists. Hence, print “Invalid Input”.
Approach: The idea is to calculate the time differences between the stations from the given timings of Train A. Follow the steps below to solve the problem:
- From the given array T[], generate an array train_B[] where train_B[i] is the time difference between T[i] and T[i – 1], where train_B[0] = 0.00 and 1 ? i ? 5.
- Therefore, train_B[] = {0.00, 0.04, 0.05, 0.06, 0.04, 0.03}.
- If the integer part of t is not in the range [0, 24] or the decimal part of t is not in the range [0, 60], then print “Invalid Input” because the integer part represents the hours and the decimal part represents the minutes.
- Otherwise, traverse over the range [0, 5] and print t + train_B[i] denoting the time for train B for the ith station. Then update t as t = t + train_B[i].
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.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;
} // This code is contributed by aditya942003patil |
// 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;
} |
// Java program for the above approach import java.util.*;
class GFG
{ // Function to find the timings for
// train B having same time difference
// as train_A
static void findTime( double [] train_A, int N,
double t)
{
double x;
// Stores the time for train_B
double [] train_B = new double [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
System.out.print(String.format( "%.2f" , x) + " " );
t = x;
}
}
// If no answer exist
else {
System.out.println( "Invalid Input." );
}
}
// Driver Code
public static void main(String[] args)
{
// Given timings of train A
// at each station
double [] train_A
= { 10.00 , 10.04 , 10.09 ,
10.15 , 10.19 , 10.22 };
int N = train_A.length;
// Given start time t
double t = 11.00 ;
// Function Call
findTime(train_A, N, t);
}
} // This code is contributed by phasing17 |
# Python3 program for the above approach # Function to find the timings for # train B having same time difference # as train_A def findTime(train_A, N, t):
# Stores the time for train_B
train_B = [ None ] * N
train_B[ 0 ] = 0.00 ;
for i in range ( 1 , N):
train_B[i] = train_A[i] - train_A[i - 1 ];
# Variables for typecasting
it = int (t);
# Check if t is valid
if (t > = 0.0 and t < = 24.0 and (t - it) < = 60.0 ) :
# Traverse from 0 to 5
for i in range ( 6 ):
# 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
print (f "{x:.2f}" , end = " " )
t = x;
# If no answer exist
else :
print ( "Invalid Input" );
# Driver Code # Given timings of train A # at each station train_A = [ 10.00 , 10.04 , 10.09 , 10.15 , 10.19 , 10.22 ];
N = len (train_A);
# Given start time t t = 11.00 ;
# Function Call findTime(train_A, N, t); # This code is contributed by phasing17 |
// C# program for the above approach using System;
using System.Collections.Generic;
class GFG
{ // Function to find the timings for
// train B having same time difference
// as train_A
static void findTime( double [] train_A, int N,
double t)
{
double x;
// Stores the time for train_B
double [] train_B = new double [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
Console.Write(x.ToString( "N2" ) + " " );
t = x;
}
}
// If no answer exist
else {
Console.WriteLine( "Invalid Input." );
}
}
// Driver Code
public static void Main( string [] args)
{
// Given timings of train A
// at each station
double [] train_A
= { 10.00, 10.04, 10.09,
10.15, 10.19, 10.22 };
int N = train_A.Length;
// Given start time t
double t = 11.00;
// Function Call
findTime(train_A, N, t);
}
} // This code is contributed by phasing17 |
// JS program for the above approach // Function to find the timings for // train B having same time difference // as train_A function findTime(train_A, N, t)
{ let x;
// Stores the time for train_B
let train_B = new Array(N);
train_B[0] = 0.00;
for (let i = 1; i < N; i++) {
train_B[i] = train_A[i] - train_A[i - 1];
}
// Variables for typecasting
let it, ix;
it = Math.floor(t);
// Check if t is valid
if (t >= 0.0 && t <= 24.0 && (t - it) <= 60.0) {
// Traverse from 0 to 5
for (let i = 0; i < 6; i++) {
// Update t
x = t + train_B[i];
ix = Math.floor(x);
if (x - ix >= 0.60)
x = x + 0.40;
if (x > 24.00)
x = x - 24.0;
// Print the current time
process.stdout.write(x.toFixed(2) + " " );
t = x;
}
}
// If no answer exist
else {
console.log( "Invalid Input" );
}
} // Driver Code // Given timings of train A // at each station let train_A = [ 10.00, 10.04, 10.09, 10.15, 10.19, 10.22 ]; let N = train_A.length; // Given start time t let t = 11.00; // Function Call findTime(train_A, N, t); // This code is contributed by phasing17 |
11.00 11.04 11.09 11.15 11.19 11.22
Time Complexity: O(1)
Auxiliary Space: O(1)