足球比分排名

汎汎發表於2018-08-10

參考自:https://blog.csdn.net/u011489043/article/details/80184972

大學生足協決定舉辦全國性的大學生足球賽,由每個學校派遣一支隊伍代表該校參賽。比賽分割槽分為幾個賽區進行,最終的總決賽中,將有不超過n支隊伍參加。經過激烈的角逐,有機會參與總決賽的隊伍已經決出。

 

協會對比賽的規則進行了調整,以便使得比賽更具有觀賞性。

1. 總決賽的參賽隊伍為n支,n為偶數;

2. 進入前1/2的隊伍才有資格進入淘汰賽;

3. 隊伍按積分排名,具體規則為:勝一場積3分;平一場積1分;負一場積0分。隊伍首先按積分降序排列,積分相同按淨勝球數降序排列,仍然相同的按進球數降序排列。

4. 基於上述規則,尚未出現有排名歧義的情況發生。

 

隨著賽程的進行,目前各個隊伍對戰的結果已經確定了,小B負責確定進入淘汰賽的名單,她向你求助,你能幫她嗎?

輸入

測試資料有多組,每組測試資料的第一行為一個整數n(1=< n <=50),為參與總決賽的球隊數,隨後的n行為球隊的名字,由不超過30個的大小寫拉丁字母構成。隨後的n*(n-1)/2行為賽事的開展情況,每行的格式為name1-name2 num1:num2,表示兩支隊伍的比分情況(1=<num1, num2<=100)。確保不會有兩支隊伍同名,也不會出現隊伍自己通自己比賽的情況,且每場比賽僅出現一次。

輸出

對每組測試資料,輸出n/2行,為按字母序排列的進入淘汰賽的n/2支隊伍的名單,每個名字在單獨的行中輸出。

 

樣例輸入

4

A

B

C

D

A-B 1:1

A-C 2:2

A-D 1:0

B-C 1:0

B-D 0:3

C-D 0:3

2

a

A

a-A 2:1

樣例輸出

A

D

a

 

	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String[] namelist = new String[25];
		int i,n;
		int j = 0;
		String input;
		while(sc.hasNext()) {
			input = sc.nextLine();
			if("output".equals(input)) {
				break;
			}else{
				n = Integer.valueOf(input);
				Map<String,Team> map = new HashMap<String,Team>();
				input(map,n,sc);
				Team[] team = new Team[n];
				i = 0;
				for (String name : map.keySet()) {
					if(name!=null)
					team[i++] = map.get(name);
				}
				//排序
				Arrays.sort(team, new Comparator<Team>() {
					@Override
					public int compare(Team o1, Team o2) {
						int score = o2.getScore() - o1.getScore();
						int realwin = o2.getRealwin() - o1.getRealwin();
						int in = o2.getIn() - o1.getIn();
						if(score!=0) return score;
						else if(realwin!=0) return realwin;
						else return in;
					}
				});
				for (i=0; i < n/2; i++) {
					namelist[j++] = team[i].getName();
				}
				System.out.println("----------");
			}
		}
		//輸出進入決賽的名單
		for (String name : namelist) {
			if(name!=null) 			
				System.out.println(name);
		}
    }
    //比賽記錄錄入
	public static void input(Map<String,Team> map,int n,Scanner sc) {
		for (int i = 0; i < n; i++) {
//			if(map.get(sc.nextLine()) == null) {
				map.put(sc.nextLine(), new Team());
//			}
		}
		for(int i = 0; i < n*(n-1)/2; i++) {
			String s = sc.nextLine();
			String[] temp = s.split(" ");
			String[] names = temp[0].split("-");
			String[] ins = temp[1].split(":");
			//主隊
			Team team1 = map.get(names[0]);
			team1.setName(names[0]);
			//客隊
			Team team2 = map.get(names[1]);
			team2.setName(names[1]);
			//進球數
			int in1 = Integer.parseInt(ins[0]);
			int in2 = Integer.parseInt(ins[1]);
			//設定進球數
			team1.setIn(in1 + team1.getIn());
			team2.setIn(in2 + team2.getIn());
			//設定得分
			if(in1 > in2) {
				team1.setScore(3 + team1.getScore());
				team2.setScore(0 + team2.getScore());
			}if(in1 == in2) {
				team1.setRealwin(in1 - in2 + team1.getRealwin());
				team2.setRealwin(in2 - in1 + team2.getRealwin());
			}else {
				team1.setScore(0 + team1.getScore());
				team2.setScore(3 + team2.getScore());
			}
			map.put(names[0], team1);
			map.put(names[1], team2);
		}
	}

 

相關文章