本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
問題描述
在荒漠中舉辦拉力賽,爲避免前車事故停車影響後車成績,賽車分批出發。每隔5分鐘出發10輛車,每輛賽車在通過起點和終點時都會獨立計時。默認所有賽車完賽的正常耗時都在8小時以內。比賽從早上8點開始,下午4點全部結束,這時還沒到終點的車輛不記到達成績。現在得到了所有賽車的單獨計時起止時間,請輸出耗時最少的車輛編號(從1開始,順序編號)和所用耗時。
輸入說明:第一行是一個整數N,表示參加賽事的賽車數量。之後是N行,每行表示一輛賽車的單獨計時時間,時間給出方式爲小時+分鐘的形式,如0830 1210表示8點30分通過起點,12點10分通過終點。
輸出說明:耗時最少車輛的序號及所有耗時(用分鐘表示),中間用空格分開,(如果所有賽車都沒有完賽,輸出-1)
輸入樣例: 6
0800 1210
0805 1320
0810 1215
0815 1300
0820 1310
0905 1430
輸出樣例: 3 245
解決方案
先從輸入輸出格式進行觀察,如何才能滿足第一行是一個整數N,表示參加賽事的賽車數量,之後是N行,每行表示一輛賽車的單獨計時時間。我們可以使用一個while循環,當輸入的行數沒到N時,我們就仍然需要向下輸入,知道下面的行數到N爲止。
再根據題目要求,求出兩個時間之間的間隔,已知0800表示8:00,1210表示12:10,我們分別可以提取0800和1210前兩位和後兩位來計算總分鐘數,例如上面一組數中,相隔時間爲(12-8)*60+10=250分鐘。這樣分別求出每組間隔時間。我們把每組間隔時間加入一個列表,求出最短時間,並在另一個列表相對應的位置插入序號,本題就解決了。
python代碼
N = int(input()) |
結語
當我們解決這類編程題時,我們要先從輸入輸出格式方向進行思考,注意區分行和列,遇到多個數據我們基本上是可以通過創建列表來找關係解決。
作者:劉仕豪
實習編輯:衡輝
稿件來源:深度學習與文旅應用實驗室(DLETA)
本文分享自微信公衆號 - 算法與編程之美(algo_coding)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。