问题:
在一次传递中,列车 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 小时)
例子:
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]范围内,则打印“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