題目:java
編程團體賽的規則爲:每一個參賽隊由若干隊員組成;全部隊員獨立比賽;參賽隊的成績爲全部隊員的成績和;成績最高的隊獲勝。正則表達式
現給定全部隊員的比賽成績,請你編寫程序找出冠軍隊。編程
輸入格式:數組
輸入第一行給出一個正整數 N(≤104),即全部參賽隊員總數。隨後 N 行,每行給出一位隊員的成績,格式爲:隊伍編號-隊員成績 成績,其中 隊伍編號 爲 1 到 1000 的正整數,隊員編號 爲 1 到 10 的正整數,成績 爲 0 到 100 的整數。測試
輸出格式:spa
在一行中輸出冠軍隊的編號和總成績,其間以一個空格分隔。注意:題目保證冠軍隊是惟一的。code
輸入樣例:對象
6 3-10 99 11-5 87 102-1 0 102-3 100 11-9 89 3-2 61
輸出樣例:blog
11 176
個人思路:字符串
每一位隊員的成績輸入時,使用String 的split()方法根據給定的正則表達式來拆分該字符串。
建立一個team的int類型的數組,每一個團隊的編號則爲這個數組的下標,該團隊的分數則爲數組中該下標所對應的數組的元素的值。
java代碼實現:
import java.io.BufferedReader; import java.io.InputStreamReader; class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] team = new int[1001]; int i,max; max = 0 ; for(i=0;i<n;i++){ String s = br.readLine(); String[] s1 = s.split("[ ]"); String[] s2 = s1[0].split("-"); int tmp = Integer.parseInt(s2[0]); team[tmp] = team[tmp] + Integer.parseInt(s1[1]); if(team[max] < team[tmp]){ max = tmp; } } System.out.println(max+" "+team[max]); } }
提交結果:
本題總結:
第一次提交本題答案時,我使用的是Scanner類來讀入數據,提交答案時,部分正確,測試答案中出現了運行超時的結果。查閱資料後,發現Scanner是一個簡單的文本掃描類,提供了一系列的nextXXX()方法,當咱們肯定輸入數據類型的時候,使用Scanner會更加方便,而也正是由於這個緣由,BufferedReader相比於Scanner類可以更高效的讀取字符序列。BufferedReader是從字符輸入流和字符緩衝區讀取文本的。