forked from kdn251/interviews
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AverageSpeed.java
executable file
·69 lines (64 loc) · 2.57 KB
/
AverageSpeed.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* You have bought a car in order to drive from Waterloo to a big city. The odometer on their car is
* broken, so you cannot measure distance. But the speedometer and cruise control both work, so the car
* can maintain a constant speed which can be adjusted from time to time in response to speed limits,
* traffic jams, and border queues. You have a stopwatch and note the elapsed time every time the speed
* changes. From time to time you wonder, “how far have I come?”. To solve this problem you must write
* a program to run on your laptop computer in the passenger seat.
* Input
* Standard input contains several lines of input: Each speed change is indicated by a line specifying the
* elapsed time since the beginning of the trip (hh:mm:ss), followed by the new speed in km/h. Each
* query is indicated by a line containing the elapsed time. At the outset of the trip the car is stationary.
* Elapsed times are given in non-decreasing order and there is at most one speed change at any given
* time.
* Output
* For each query in standard input, you should print a line giving the time and the distance travelled, in
* the format below.
* Sample Input
* 00:00:01 100
* 00:15:01
* 00:30:01
* 01:00:01 50
* 03:00:01
* 03:00:05 140
* Sample Output
* 00:15:01 25.00 km
* 00:30:01 50.00 km
* 03:00:01 200.00 km
*/
//https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1222
import java.text.DecimalFormat;
import java.util.Scanner;
public class AverageSpeed {
public static void main(String[] args) {
int speed = 0;
boolean reachedTheEnd = false;
Scanner input = new Scanner(System.in);
String nextLine = input.nextLine();
double hour = 0;
double baseHour = 0;
double kilometersPassed = 0;
while (!reachedTheEnd) {
String[] time1 = nextLine.split(" ");
String[] time = nextLine.split(":");
String[] extendedTime = new String[2];
DecimalFormat formatter = new DecimalFormat("#0.00");
hour = calcHours(time1[0]);
kilometersPassed += (hour - baseHour) * speed;
if (time[2].contains(" ")) {
extendedTime = time[2].split(" ");
speed = Integer.valueOf(extendedTime[1]);
} else {
System.out.print(nextLine + " "
+ formatter.format(kilometersPassed) + " km\n");
}
baseHour = hour;
nextLine = input.nextLine();
}
}
private static double calcHours(String s) {
String[] arr = s.split(":");
return (Integer.parseInt(arr[0]) * 3600 + Integer.parseInt(arr[1]) * 60 + Integer
.parseInt(arr[2])) * 1.0 / 3600;
}
}