问题:
一次火车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小时)
例子:
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”.
方法:想法是从给定的火车A时刻计算站点之间的时差。按照以下步骤解决问题:
- 从给定的数组T []生成一个数组train_B [] ,其中train_B [i]是T [i]和T [i – 1]之间的时间差,其中train_B [0] = 0.00且1≤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)