题目
现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序。
输入
第一行为第一门选修课学生的成绩
第二行为第二门选修课学生的成绩
每行数据中学生之间以英文分号分隔,每个学生的学号和成绩以英文逗号分隔学生学号的格式为8位数字
学生学号的格式为8位数字
2位院系编号+入学年份后2位+院系内部1位专业编号+所在班级3位学号
学生成绩的取值范围为[0,1001之间的整数
两门选修课选修学生数的取值范围为[1-20001之间的整数
输出
同时选修了两门选修课的学生的学号,如果没有同时选修两门选修课的学生输出NULL.否则,先按照班级划分,班级编号小的先输出,每个班级先输出班级编号(学号前五位)然后另起一行输出这个班级同时选修两门选修课的学生学号,学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序学生之间以英文分号分隔。
用例1
输入:
01202021,75;01201033,95;01202008,80;01203006,90;01203088,100
01202008,70;01203088,85;01202111,80;01202021,75;01201100.88
输出:
01202
01202008 01202021
01203
01203088
用例2
输入:
01201022,75;01202033,95;01202018,80;01203006,90;01202066,100
01202008,70;01203102,85;01202111,80;01201021,75;01201100,88
输出:
NULL
说明:
没有同时选修了两门选修课的学生,输出NULL。
思路
主要是排序。这里使用的是map + 实体
需要对处理过的数据进行排序。
class Student implements Comparable<Student> {
private String num;
private Integer score;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
public int compareTo(Student o) {
return o.score.equals(this.score) ? o.score.compareTo(this.score) : o