PAT(Basic Level) 乙級練習題 ------ 1047 編程團體賽 java

1047.編程團體賽

題目:java

編程團體賽的規則爲:每一個參賽隊由若干隊員組成;全部隊員獨立比賽;參賽隊的成績爲全部隊員的成績和;成績最高的隊獲勝。正則表達式

現給定全部隊員的比賽成績,請你編寫程序找出冠軍隊。編程

輸入格式:數組

輸入第一行給出一個正整數 N(≤10​4​​),即全部參賽隊員總數。隨後 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是從字符輸入流和字符緩衝區讀取文本的。

  • Scanner類位於java.util包中,具體用法爲Scanner in = new Scanner(System.in)。Scanner 類的 next() 與 nextLine() 方法獲取輸入的字符串而且能夠經過一系列的方法來得到相應的數據基本類型。
  • BufferReader位於java.io包中,具體用法爲 BufferedReader br = new BufferedReader (newInputStreamReader(System.in)) 。【須要注意的是使用BufferedReader對象的readLine()方法必須處理java.io.IOException異常。BufferReader對象經過readLine()方法來讀取數據。readLine()方法返回的是字符串,所以獲得一些其餘類型的數據就須要本身轉換。雖然比Scanner麻煩,可是經過BufferReader讀入的效率要比Scanner高,讀取數據越多,效果越明顯。
相關文章
相關標籤/搜索