题目例如以下:
比赛情况统计
有一个游戏平台,各个參赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间仅仅举行一场比赛,比赛以得分的多少定胜负。须要完毕一个统计赛况的程序,可以随时查询指定队伍的最新赛况:包含胜、平、负的局数,当前总积分以及名次。
说明:循环赛没有所有结束时也能够查询某个队伍的最新赛况
规则说明
比赛判定:两个队伍中得分高的一方为胜者,还有一方为负者;得分同样则为平局
积分规则:每一局比赛: 胜者积3分;平局两方各积1分; 负者积0分
排名规则:依照当前总积分的高低,名次从1開始依次进行排名。积分同样的名次并列,出现n(n>=2)个队伍名次并列时,则并列名次的下面n-1个名次空出
输入满足例如以下规格或约束,考生程序无需检查:
(1)比赛队伍总数<=1000<>
(2)0 <= teamid<= 65535<>
(3)每一个队伍的总积分<=65535<>
(4)队伍1对队伍2的比赛, 队伍2对队伍1的比赛指同一场比赛
(5)不会反复输入同一场比赛的比赛结果
(6)自己和自己不比赛
循环赛的前两场比赛结果例如以下:
队伍1ID |
队伍1得分 |
队伍2ID |
队伍2得分 |
|
比赛1 |
1 |
34 |
2 |
45 |
比赛2 |
2 |
40 |
3 |
40 |
输入:
队伍相互比赛信息,格式是队伍id和得分,如1 2 34 45 ,就是ID为1和2的两个队伍的比赛得分是34与45.一个队赛况结果内的数据用空格隔开;
输出:
以名次去排列的得分情况,依次是
队伍ID |
胜的场数 |
平局场数 |
负的场数 |
总积分 |
名次 |
2 |
1 |
1 |
0 |
4 |
1 |
那么就是 211041
測试例子:
输入:1 2 34 45 2 3 4040 1 3 35 45
输出:1 0 0 2 0 3 2 1 10 4 1 3 1 1 0 4 1
我的程序——
package Tran0624; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet; public class Main { private static HashMap<Integer,Troop> list; public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
String[] ssStrings = string.split(" "); //四个是一场比赛 //每一组数据,队伍id , 得分
int n = ssStrings.length; int[] dataArray = new int[n];
list = new HashMap<Integer,Troop>();
boolean existFlag = false; for (int i = 0; i <n; i++) {
dataArray[i] = Integer.parseInt(ssStrings[i]);
}
for (int i = 0; i < n; i++) { if ((i%4 == 0)||(i%4 == 1)) { list.put(dataArray[i],new Troop(dataArray[i] )); }else if(i%4 == 2){ if (dataArray[i]> dataArray[i+1]) { list.get(dataArray[i-2]).setWinNum( list.get(dataArray[i-2]).getWinNum()+1);
list.get(dataArray[i-2]).setScores(list.get(dataArray[i-2]).scores+3); list.get(dataArray[i-1]).setFailNum(list.get(dataArray[i-1]).getFailNum()+1); }else if(dataArray[i]== dataArray[i+1]) { list.get(dataArray[i-2]).setEqualNum(list.get(dataArray[i-2]).getEqualNum()+1);
list.get(dataArray[i-2]).setScores(list.get(dataArray[i-2]).scores+1); list.get(dataArray[i-1]).setEqualNum(list.get(dataArray[i-1]).getEqualNum()+1);
list.get(dataArray[i-1]).setScores(list.get(dataArray[i-1]).scores+1);
}else if(dataArray[i]< dataArray[i+1]) { list.get(dataArray[i-1]).setWinNum( list.get(dataArray[i-1]).getWinNum()+1);
list.get(dataArray[i-1]).setScores(list.get(dataArray[i-1]).scores+3); list.get(dataArray[i-2]).setFailNum(list.get(dataArray[i-2]).getFailNum()+1);
} }
}
Set<Integer> set = list.keySet();
Iterator<Integer> iterator = set.iterator();
ArrayList<Troop> mapArrayList = new ArrayList<Main.Troop>();
while(iterator.hasNext()){
mapArrayList.add(list.get(iterator.next()));
} Collections.sort(mapArrayList);
for (int j = 0; j < mapArrayList.size(); j++) {
System.out.println(mapArrayList.get(j).toString());
} } public static class Troop implements Comparable<Troop>{
private int id = 0;
private int winNum = 0;//胜利场数
private int equalNum = 0;//平局
private int failNum = 0;//负场数
private int scores = 0; //积分 public Troop(int id){
this.id = id;
}
@Override
public int compareTo(Troop o) { return o.id;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getWinNum() {
return winNum;
}
public void setWinNum(int winNum) {
this.winNum = winNum;
}
public int getEqualNum() {
return equalNum;
}
public void setEqualNum(int equalNum) {
this.equalNum = equalNum;
}
public int getFailNum() {
return failNum;
}
public void setFailNum(int failNum) {
this.failNum = failNum;
}
public int getScores() {
return scores;
}
public void setScores(int scores) {
this.scores = scores;
} @Override
public String toString() {
return ""+id+winNum+equalNum+failNum+scores ;
//"Troop [id=" + id + ", winNum=" + winNum + ", equalNum="
// + equalNum + ", failNum=" + failNum + ", scores=" + scores
// + ", rank=" + rank + "]";
} } }