附上题目链接~https://www.patest.cn/contests/pat-a-practise/1036
题意就是输出女生中成绩最高的那个女生的name和id,男生中成绩最低的那个男生的name和id,和两个成绩的差值f.grade-g.grade
其实就是一个C++中的结构体排序题,那么在Java中我用class代替结构体,排序的时候有两种方法。
1)第一种方法是在类person内实现Comparable接口并且实现其compareTo方法。这样我们调用Arrays.sort()时只要输入数组,起始位置,终止位置就可以啦。
2)第二种则是重写cmp接口,定义一个Comparator<person>类型的cmp,后实现必要的compare方法。后调用Arrays.sort()时输入数组,起始位置,终止位置,cmp就行啦。
方法1代码:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class person implements Comparable<person>{
String name;
String id;
int grade;
public person(String name, String id, int grade) {
this.name = name;
this.id = id;
this.grade = grade;
}
@Override
public int compareTo(person o) {
return this.grade-o.grade;
}
}
public class A1036 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
person[] g = new person[n];//女生person类数组
person[] b = new person[n];//男生person类数组
String name, id,sex;
int grade;
int cnt1=0, cnt2=0;
for(int i = 0; i<n; i++){
name = in.next();
sex = in.next();
id = in.next();
grade = in.nextInt();
//实际上sex并不用存,因为已经分为了男女两个数组
if(sex.equals("M")) b[cnt1++] = new person(name, id, grade);
else g[cnt2++] = new person(name, id, grade);
}
if(cnt2>0){
Arrays.sort(g, 0, cnt2);//按grade从小大排序,数组最后一个即为成绩最高的女生
System.out.println(g[cnt2-1].name+" "+g[cnt2-1].id);
}
else System.out.println("Absent");
if(cnt1>0){
Arrays.sort(b, 0, cnt1);//按grade从小到大排序,数组第一个即为成绩最低的男生
System.out.println(b[0].name+" "+b[0].id);
}
else System.out.println("Absent");
if(cnt1==0 || cnt2==0) //至少有一个为0则不能相减,输出NA
System.out.println("NA");
else System.out.println(Math.abs(g[cnt2-1].grade-b[0].grade));
}
}
方法2代码:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class person {
String name;
String id;
int grade;
public person(String name, String id, int grade) {
this.name = name;
this.id = id;
this.grade = grade;
}
}
public class A1036 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
person[] g = new person[n];
person[] b = new person[n];
String name, id,sex;
int grade;
int cnt1=0, cnt2=0;
//重写cmp接口
Comparator<person> cmp = new Comparator<person>() {
public int compare(person o1, person o2) {
return o1.grade-o2.grade;
}
};
for(int i = 0; i<n; i++){
name = in.next();
sex = in.next();
id = in.next();
grade = in.nextInt();
if(sex.equals("M")) b[cnt1++] = new person(name, id, grade);
else g[cnt2++] = new person(name, id, grade);
}
if(cnt2>0){
Arrays.sort(g, 0, cnt2, cmp);//这里还要加上cmp
System.out.println(g[cnt2-1].name+" "+g[cnt2-1].id);
}
else System.out.println("Absent");
if(cnt1>0){
Arrays.sort(b, 0, cnt1, cmp);//这里还要加上cmp
System.out.println(b[0].name+" "+b[0].id);
}
else System.out.println("Absent");
if(cnt1==0 || cnt2==0)
System.out.println("NA");
else System.out.println(Math.abs(g[cnt2-1].grade-b[0].grade));
}
}