解决此题的关键在于,如何对数据进行排序。首先阅读题目可知,我们可以对考生编号和分数装入一个二维数组中,再利用Math.floor()对面试录取的名额数进行向下取整,再利用一个数组获取二维数组中分数,将分数进行sort()排序,在对数组进行反转,使数组中的分数按照从大到小的顺序排列。再通过比较即可得到录取分数线和实际录取的名额数。再接下来通过两个for循环,来查找分数数组中所对应的学生编号(通过条件来控制得到考生编号的最小值),对已经输出的考生编号赋值为10000,代表已经输出,即可解决此题
import java.util.*; public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int[][] s=new int[n][2];
for(int i=0;i<n;i++) {
for(int j=0;j<2;j++) {
s[i][j]=sc.nextInt();
}
}
int mianshiCount=(int)Math.floor(m*1.5);
int[] score=new int[n];
for(int i=0;i<n;i++) {
score[i]=s[i][1];
}
Arrays.sort(score);
int[] score1=new int[n];
for(int i=0;i<n;i++) {
score1[i]=score[n-i-1];
}
int count=0;
for(int i=0;i<n;i++){
if(score1[i]>=score1[mianshiCount-1]) {
count++;
}
}
System.out.println(score1[mianshiCount-1]+" "+count);
for(int i=0;i<count;i++) {
int min=9999;
int x=0;
for(int j=0;j<n;j++) {
if(s[j][1]==score1[i]) {
if(s[j][0]<min) {
min=s[j][0];
x=j;
}
}
}
s[x][0]=10000;
System.out.println(min+" "+score1[i]);
}
// for(int i=0;i<n;i++) { // System.out.print(score1[i]+" "); // }
}
}