题目链接
P1093题目链接
我们需要排序,不如用TreeMap或者TreeSet,但有三个关键词,所以确实不好办。 斟酌再三,决定用TreeSet,而且将三个属性完全封装为一个类而不是一个1对2(元素数量)的映射关系,反而简单一些。 这样,我们利用面向对象的类,简化了问题的复杂度:
private static class Grade {
Integer num;
Integer chinese;
Integer grade;
public Grade(int num, int chinese, int grade) {
this.num = num;
this.chinese = chinese;
this.grade = grade;
}
}
我们根本不关注数学和英语成绩(在总分计算之后),所以不需要存储。
最后输出的话,因为题意暗示不会出现小于5人的状况,所以不需要担心,加一个counter,到5就break循环就好啦。
TreeMap需要自己制定排序规则,如下:
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Grade grade1, Grade grade2) {
int result1 = -grade1.grade.compareTo(grade2.grade);
if (result1 != 0) {
return result1;
}
int result2 = -grade1.chinese.compareTo(grade2.chinese);
if (result2 != 0) {
return result2;
}
return grade1.num.compareTo(grade2.num);
}
});
正负号一定要弄明白哈,别搞错啦!!
AC代码(Java语言描述)import java.util.*;
public class Main {
private static class Grade {
Integer num;
Integer chinese;
Integer grade;
public Grade(int num, int chinese, int grade) {
this.num = num;
this.chinese = chinese;
this.grade = grade;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Grade grade1, Grade grade2) {
int result1 = -grade1.grade.compareTo(grade2.grade);
if (result1 != 0) {
return result1;
}
int result2 = -grade1.chinese.compareTo(grade2.chinese);
if (result2 != 0) {
return result2;
}
return grade1.num.compareTo(grade2.num);
}
});
for (int i = 1; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?