PAT 甲级 1036
题目说明:给定N个学生的姓名、性别、学号、分数,输出女生中的最高分和男生中的最低分,如果没有输出Absent,最后一行输出女生最高分数减去男生最低分数的结果,没有的话输出NA
**题目分析:**数据录入的时候将男女生分开,建立6个数组分别存放femaleName、femaleID、femaleSocer和maleName、maleID、maleSocer,方便后续操作。对成绩排序的时候需要互换位置的,同时也将name id一并换了顺序,保证其对应性,可用一个方法来解决。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
String[] MaleName=new String[N];
String[] FemnalName=new String[N];
String[] MaleID=new String[N];
String[] FemaleID=new String[N];
int[] MaleSocer=new int[N];
int[] FemaleSocer=new int[N];
for(int i=0;i<N;i++){
String[] str=br.readLine().split(" ");
String name=str[0];
String gender=str[1];
String ID=str[2];
int socer=Integer.parseInt(str[3]);
if(gender.equals("M")){
MaleName[i]=name;
MaleID[i]=ID;
MaleSocer[i]=socer;
}else{
FemnalName[i]=name;
FemaleID[i]=ID;
FemaleSocer[i]=socer;
}
}
br.close();//以上全是录入数据,下边才是算法的开始
boolean female=false;
for(int i=0;i<N;i++){//如果女生数组全为空,说明没有女生,记录下来
if(FemnalName[i]!=null){//准备输出Absent
female=true;
break;
}
}
boolean male=false;
for(int i =0;i<N;i++){//同女生,记录输出Absent的条件
if(MaleName[i]!=null){
male=true;
break;
}
}
int count=0;
if(female==false){
System.out.println("Absent");
}else{
sort(FemnalName,FemaleID,FemaleSocer);
System.out.println(FemnalName[N-1]+" "+FemaleID[N-1]);
}//女生输出最大成绩
if(male==false){
System.out.println("Absent");
}else{
sort(MaleName,MaleID,MaleSocer);
for(int i=0;i<N;i++){
if(MaleSocer[i]!=0){
count=i;
break;
} //男生输出最小成绩
}
System.out.println(MaleName[count]+" "+MaleID[count]);
}
if(female==false||male==false){
System.out.println("NA");
}else{
System.out.println(FemaleSocer[N-1]-MaleSocer[count]);
}
}
public static void sort(String[] name,String[] ID,int[] socer){//对成绩排序的方法
for(int i=0;i<socer.length-1;i++){
for(int j=i+1;j<socer.length;j++){
if(socer[i]>socer[j]){
int temp=socer[i];
socer[i]=socer[j];
socer[j]=temp;
String t=name[i];//一并将name id的位置都换了,保证对应性
name[i]=name[j];
name[j]=t;
t=ID[i];
ID[i]=ID[j];
ID[j]=t;
}
}
}
}
}
有不懂的请留言哈,本人看到了定当马上回复。