PAT 甲级 1012 The Best Rank (25 分)(Java)
2021/10/27 22:12:30
本文主要是介绍PAT 甲级 1012 The Best Rank (25 分)(Java),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- PAT 甲级 1012 The Best Rank (25 分)(Java)
- 题目
- 大体题意
- 解题思路
- 解法
- 解法一
PAT 甲级 1012 The Best Rank (25 分)(Java)
题目
题目链接
大体题意
一组学生成绩,每个学生分别有c语言、数学、英语三门课的成绩以及三门课的平均成绩,每门课都一个相应排名,现在需要知道指定学生的四门成绩中排名最靠前的一门成绩及相应的排名,优先级按照平均成绩> c > 数学 > 英语
解题思路
- 首先需要一个学生类,有学号、四门课的成绩、四门课各自的排名、四门课最优排名的索引;
- 分别对每门课进行排序并确认相应的排名;
- 获取每个学生四门课中的最优排名;
- 通过数组将学号和在学生数组中的位置进行映射,通过空间换时间以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<n; ++i){ data[i] = new Student(); data[i].grade = new int[4]; data[i].rank = new int[4]; sc.nextToken(); data[i].number = (int)sc.nval; sc.nextToken(); data[i].grade[1] = (int)sc.nval; sc.nextToken(); data[i].grade[2] = (int)sc.nval; sc.nextToken(); data[i].grade[3] = (int)sc.nval; data[i].grade[0] = ( data[i].grade[1] + data[i].grade[2] + data[i].grade[3]) / 3; } for(int i=0; i<4; ++i){ flag = i; Arrays.sort(data, new Comparator<Student>() { @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"); } } } }
这篇关于PAT 甲级 1012 The Best Rank (25 分)(Java)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南
- 2024-12-31数据赋能,智慧养老:看板软件如何重塑养老服务生态