題目:北京大學的許多研究生住在萬柳校區,距離主校區燕園有4.5公里。住在萬柳的同學或者乘坐巴士,或者騎自行車去主校區上課。由於北京糟糕的交通,許多同學選擇騎自行車。
我們假定除了Charley以外,所有的同學從萬柳到燕園都是以某一確定的速度騎自行車。Charley則有一個不同的騎車習慣-他總是要跟在另一個騎車同學的後面,以免一個人獨自騎車。當Charley到萬柳校區大門口的時候,他就等待離開萬柳去燕園的同學。如果他等到這樣的同學,他就騎車跟著這位同學;如果沒有這樣的同學,他就等待去燕園的同學出現,然後騎車跟上。在從萬柳到燕園的路上,如果有騎得更快的同學超過了Charley,他就離開原先跟著的同學,加速跟上騎得更快的同學。
假設Charley到萬柳校區大門口的時間為0,列出其他同學離開萬柳的時間和速度,請你列出Charley到達燕園的時間。
輸入:有幾組測試用例,每組測試用例的第一行為N(1<=N<=10000),表示除Charley外騎車同學的數量。以N=0表示輸入結束。每組測試用例的第一行後面的N行表示N個騎車同學的資訊,形式為Vi Ti。
Vi<40,是一個正整數,表示第i個騎車同學的速度(每小時公里數),T則是第i個騎車同學離開萬柳的時間,是一個整數,以秒為單位。在任何測試用例中總存在非負的Ti。
輸出:對每個測試用例輸出一行:Charley到達的時間。在處理分數的時候進1。
import java.util.Scanner;
public class RideToSchool {
public static void main(String[] args) {
final double DISTANCE = 4.5;
while (true) {
int m;
Scanner scanIn = new Scanner(System.in); // 輸入有幾組測試用例
m = scanIn.nextInt();
if (m == 0)
break;
double v, t, x, min = 10000;
for (int i = 0; i < m; i++) {
scanIn = new Scanner(System.in); // 輸入每一個測試用例的時速與出發時間
v = scanIn.nextDouble();
t = scanIn.nextDouble();
if (t >= 0 && (x = DISTANCE * 3600 / v + t) < min) {
min = x;
}
}
System.out.printf("%.2f\n", Math.ceil(min));
}
}
}
鏈結到這頁!