題目:北京大學的許多研究生住在萬柳校區,距離主校區燕園有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)); } } }
鏈結到這頁!