PAT 乙级 1080 java

 部分正确,这个方法很笨,直接用用空间换时间。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

/**
 * 1080
 * @author quchu
 * @date 2019/10/21
 */
public class Main {
    public static void main(String[] args)  throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashMap<String, int[]> hashMap = new HashMap<>();//String为对应的学号,int为对应的成绩,0:Gp, 1:Gmid-term, 2:Gfinal, 3:G(总成绩)
        String [] nums=br.readLine().split("[ ]");
        int p_count=Integer.parseInt(nums[0]);//编程成绩
        int md_count=Integer.parseInt(nums[1]);//期中成绩
        int f_count=Integer.parseInt(nums[2]);//期末成绩
        int i=0;
        while(i<(p_count+md_count+f_count)){
            String[] scores=br.readLine().split("[ ]");
            if(i<p_count){
                //存储编程成绩:低于两百的学生不做存储
                int[] scoreList = new int[4];
                scoreList[0]=Integer.parseInt(scores[1]);
                if(scoreList[0]>=200){
                    hashMap.put(scores[0],scoreList);
                }
            }else if(i<p_count+md_count){
                //存储期中考试成绩:在已经有的成员的基础上添加成绩数据
                if(hashMap.containsKey(scores[0])){
                    int[] scoreList = hashMap.get(scores[0]);
                    scoreList[1]=Integer.parseInt(scores[1]);
                    hashMap.put(scores[0],scoreList);
                }
            }else{
                //存储期末考试成绩:在已经有的成员的基础上添加成绩数据
                if(hashMap.containsKey(scores[0])){
                    int[] scoreList = hashMap.get(scores[0]);
                    scoreList[2]=Integer.parseInt(scores[1]);
                    //计算最终结果G,若总成绩大于60则判定为合格
                    if(scoreList[2]>scoreList[1]){
                        scoreList[3]=scoreList[2];
                    }else{
                        scoreList[3]=(int)(scoreList[1]*0.4+scoreList[2]*0.6+0.5);
                    }
                }
            }
            i++;
        }
        //对结果进行过滤,使用迭代器将指定的不合格的数据进行删除并排序,
        Set<Map.Entry<String, int[]>> entrySet = hashMap.entrySet();
        List<Map.Entry<String, int[]>> entryArrayList = new ArrayList<>(entrySet);
        Collections.sort(entryArrayList, new Comparator<Map.Entry<String, int[]>>() {
            @Override
            public int compare(Map.Entry<String, int[]> o1, Map.Entry<String, int[]> o2) {
                int result=0;
                //首先采用总成绩降序排序
                result=o2.getValue()[3]-o1.getValue()[3];
                //在总成绩相同的情况下使用学号递增排序
                if(result ==0){
                    result=o1.getKey().compareTo(o2.getKey());
                }
                return result;
            }
        });
        for (Map.Entry<String, int[]> stringEntry : entryArrayList) {
            if (stringEntry.getValue()[3] > 60) {//成绩合格的学生
                System.out.print(stringEntry.getKey());
                for (int score : stringEntry.getValue()) {
                    if(score ==0){
                        score=-1;//当出现没有输入的情况下,将对应的成绩修改为-1
                    }
                    System.out.print(" " + score);
                }
                System.out.println();
            }
        }
        br.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值