题目例如以下:

比赛情况统计

有一个游戏平台,各个參赛队伍(以唯一的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 + "]";
} } }

华为OJ培训主题 比赛统计的更多相关文章

  1. 华为oj之字符个数统计

    题目:字符个数统计 热度指数:4720 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127). ...

  2. 华为OJ:火车进站

    火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...

  3. 在华为oj的两个月

    一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...

  4. hdu oj 1285 确定比赛名次

    hdu oj 1285 确定比赛名次 题目: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. 华为OJ平台——统计字符串中的大写字母

    题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...

  6. 华为oj 统计字符串不同字符

    #include <stdio.h> #include <string.h> int firstSingle(char *str) { int hash[128]={0}; f ...

  7. 华为oj - 统计大写字母个数

    练手而已. 给初学者参考 #include <stdio.h> #include <string.h> int main(void) { char string[200]={' ...

  8. 华为OJ题目:刷题

    题目描述: 新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题.每天, ...

  9. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

随机推荐

  1. Android编程心得-设计一个可重用的自定义Dialog

            我们在实际开发过程中,会遇到一个问题,我们的Dialog如果使用一般的方法进行设置调用出来,会有很多的重复代码,如何将Dialog按照自己的思路设计呢,并让其可重用呢,下面我来介绍一下 ...

  2. IT该忍者神龟Instant client required

    pply OS : Windows, Mac, Linux Apply Navicat Product : Navicat for Oracle, Navicat Premium Apply Navi ...

  3. cocos2dx 3.0 飞机大战

    因为课程须要.然后又水平有限.所以写了个飞机大战.加上不会画画.所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事. 闲话不说.先讲一下设计.大体上一共分为3个场景.场景以下是Layer ...

  4. sizeof与strlen的区别 浅谈

    1.sizeof operator sizeof是C语言的一种单目操作符,如C语言的其他操作符++.- - 等,它并不是函数. Queries size of the object or type. ...

  5. QScriptEngine

    其实你有好多没有介绍 比如qt文字 我一直很迷惑qt的文字的长宽 qt文字的字间距 等等这些东西还有QProcess QProcess可能是qt调用c#的唯一方法了QScript要比你想象的重要,一个 ...

  6. Jquery学习笔记:通过层次关系获取jquery对象

    前面一篇文章,我们介绍了如何通过web标签的id , css样式值来获取jquery对象. 但这只是基本方法,不能满足所有场景的需求. 本文介绍通过dom元素之间的层次关系获取元素.具体是将各种标识符 ...

  7. android用户界面之ScrollView教程实例汇总

    --------------------------汇总不容易啊------------------------------- 一.ScrollView基础知识 1.Android中ScrollVie ...

  8. 解说cocos2d-x几种画图方法的用法与思考

    CCRenderTexture 自己的理解 CCRenderTexture类似一张空白的“画布“,用户通过自定义笔刷(CCSprite*),在touch事件中把笔刷的移动痕迹“记录”起来,从而“画”出 ...

  9. mpi中利用自定义归约操作实现merge

    在归并排序中,很重要的一步是将两个排序数组合并成一个数组,这个操作叫merge.merge操作可以用来解决某些Top K问题. 问题描述 在哼唱搜索中,用户通过哼唱一个音乐片段去搜索与其相似的音乐.后 ...

  10. 泛虚拟化技术(以Xen为例)

    一.概述    最主要的特点是:修改Guest OS的内核代码.通过修改内核,使Guest OS明白自己是运行在R-1,不要直接去运行特权指令,如果要运行就去Hypercall(主动VMM陷入).   ...