栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PAT 甲级 1012 The Best Rank (25 分)(Java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PAT 甲级 1012 The Best Rank (25 分)(Java)

文章目录
  • PAT 甲级 1012 The Best Rank (25 分)(Java)
    • 题目
    • 大体题意
    • 解题思路
    • 解法
      • 解法一

PAT 甲级 1012 The Best Rank (25 分)(Java) 题目

题目链接

大体题意

一组学生成绩,每个学生分别有c语言、数学、英语三门课的成绩以及三门课的平均成绩,每门课都一个相应排名,现在需要知道指定学生的四门成绩中排名最靠前的一门成绩及相应的排名,优先级按照平均成绩> c > 数学 > 英语

解题思路
  1. 首先需要一个学生类,有学号、四门课的成绩、四门课各自的排名、四门课最优排名的索引;
  2. 分别对每门课进行排序并确认相应的排名;
  3. 获取每个学生四门课中的最优排名;
  4. 通过数组将学号和在学生数组中的位置进行映射,通过空间换时间以O(1)的时间复杂度获取当前学生是否存在;

注:输入需要使用StreamTokenizer;

解法 解法一
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;

class Student{
    public int number; // 学号
    public int[] grade; // 分数数组
    public int[] rank; // 排名数组
    public int best; // 最佳排名
}

public class Main {

    static int flag = 0; // 分数数组排序列的索引,如flag = 0是对平均分进行排序

    public static void main(String[] args) throws IOException {
        StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        sc.nextToken();
        int n = (int)sc.nval;
        sc.nextToken();
        int m = (int)sc.nval;
        Student[] data = new Student[n];
        int[] exist = new int[1000001]; // 映射数组,判断当前学号是否存在以及在Student数组中的位置
        char[] subject = new char[]{'A', 'C', 'M', 'E'};
        for (int i=0; i() {
                @Override
                public int compare(Student o1, Student o2) {
                    return o2.grade[flag] - o1.grade[flag] ;
                }
            });
            // 平均分或学科分数的排名情况
            data[0].rank[flag] = 1;
            for (int j = 1; j < n; j++) {
                if(data[j].grade[flag] == data[j-1].grade[flag]){
                    data[j].rank[flag] = data[j-1].rank[flag];
                }else{
                    data[j].rank[flag] = j + 1;
                }
            }
        }
        // 获取每个人最优的排名情况
        for (int i = 0; i < n; i++) {
            int k = 0;
            int min = data[i].rank[0];
            exist[data[i].number] = i + 1;
            for (int j = 1; j < 4; j++) {
                if(min > data[i].rank[j]){
                    min = data[i].rank[j];
                    k = j;
                }
            }
            data[i].best = k;
        }

        for (int i = 0; i < m; i++) {
            sc.nextToken();
            int id = (int)sc.nval;
            flag = exist[id];
            if(flag > 0){
                System.out.println(data[flag-1].rank[data[flag-1].best] + " " + subject[data[flag-1].best]);
            }else{
                System.out.println("N/A");
            }
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351915.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号