=====
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
输入格式:
输入第一行给出 3 个正整数,分别为:N(≤105),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。
随后 N 行,每行给出一位考生的信息,包括:准考证号 德分 才分
,其中准考证号
为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。
输出格式:
输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
输入样例:
14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60
结尾无空行
输出样例:
12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90
结尾无空行
这题是我做PAT以来遇到的最困难的,并且首次尝试用类分装,对于题中的各种排序还是心有余而力不足,无法完全满足题目要求,一开始无效的敲了这么多代码,又长又不对,哎~,代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int L = sc.nextInt();
int H = sc.nextInt();
int M = 0;
int F = 0;
int S = 0;
int T = 0;
int[] arr = new int[N];
Examinee[] examinee = new Examinee[N];//创建考生Examinee的一个类数组
for(int i = 0 ;i<N;i++){
arr[i] = i;
examinee[i] = new Examinee();//初始化类数组的每个对象
examinee[i].setXuhao(sc.nextInt());
examinee[i].setCharacter(sc.nextInt());
examinee[i].setTalent(sc.nextInt());
}
for(int i =0 ;i<N;i++){
if(examinee[i].getCharacter() >= H&&examinee[i].getTalent() >= H){
examinee[i].setDengji(1);
F++;
}else if(examinee[i].getCharacter() >= H && examinee[i].getTalent() >= L){
examinee[i].setDengji(2);
S++;
}else if(examinee[i].getCharacter() >= L && examinee[i].getTalent() >= L && examinee[i].getTalent() <= examinee[i].getCharacter()){//才德兼亡
examinee[i].setDengji(3);
T++;
}else if(examinee[i].getCharacter() >= L&&examinee[i].getTalent() >= L){
examinee[i].setDengji(4);
M++;
}else
examinee[i].setDengji(5);
}
int k = 0;
for(int i = 0;i < N;i++){
if(examinee[i].getDengji() == 1){
arr[k] = i;
k++;
}
}
for(int i = 0;i<=k-1;i++){
for(int j = 0;j<=k-i-1;j++){
if(examinee[arr[j]].getSum() < examinee[arr[j+1]].getSum()){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i < N;i++){
if(examinee[i].getDengji() == 2){
arr[k] = i;
k++;
}
}
for(int i = F+1;i<=k-1;i++){
for(int j = F+1;j<=k-i-1;j++){
if(examinee[arr[j]].getSum() < examinee[arr[j+1]].getSum()){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i < N;i++){
if(examinee[i].getDengji() == 3){
arr[k] = i;
k++;
}
}
for(int i = F+1+S;i<=k-1;i++){
for(int j = F+1+S;j<=k-i-1;j++){
if(examinee[arr[j]].getSum() < examinee[arr[j+1]].getSum()){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i < N;i++){
if(examinee[i].getDengji() == 4){
arr[k] = i;
k++;
}
}
for(int i = F+1+S+T;i<=k-1;i++){
for(int j = F+1+S+T;j<=k-i-1;j++){
if(examinee[arr[j]].getSum() < examinee[arr[j+1]].getSum()){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(k);
for(int i = 0;i<k;i++){
examinee[arr[i]].show();
}
}
}
class Examinee{
private int xuhao;
private int character;
private int talent;
private int dengji;
public Examinee() {
super();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
[外链图片转存中…(img-gSNbpcMM-1711744192541)]
[外链图片转存中…(img-IDaDl1ew-1711744192541)]