这一题还是挺简单的。但是三种不同的情况(总分、语文成绩、学号)一定要全部排一遍,不然会怀疑
人生。😫
上代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Scanner;
public class Main {
static int[][] m;
static int n;
//对总分排序
static void sort(int a, int b) {
int key = m[(a+b)/2][1];
int i=a,j=b;
do {
while(m[i][1]>key&&i<b) i++;
while(m[j][1]<key&&j>a) j--;
if(i<=j) {
int[] z = m[i];
m[i] = m[j];
m[j] = z;
i++;
j--;
}
}while(i<=j);
if(j>a) sort(a,j);
if(i<b) sort(i,b);
}
//语文成绩、学号排序
static void sorts() {
int[] a;
for(int i=0; i<n-1; i++) {
for(int j=i; j<n; j++) {
if(m[i][1]==m[j][1] && m[i][2]<m[j][2]) {
a = m[i];
m[i] = m[j];
m[j] = a;
}
//(⊙o⊙)…怀疑我脑子有what,三种情况一定要全排一遍
//else if(m[i][1]==m[j][1] && m[i][2]<m[j][2] && m[i][0]>m[j][0]) {
// a = m[i];
// m[i] = m[j];
// m[j] = a;
//}
}
}
for(int i=0; i<n-1; i++) {
for(int j=i; j<n; j++) {
if(m[i][1]==m[j][1] && m[i][2]==m[j][2] && m[i][0]>m[j][0]) {
a = m[i];
m[i] = m[j];
m[j] = a;
}
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in = new StreamTokenizer(br);
PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
in.nextToken();
n = (int)in.nval;
m = new int[n][3];
int a,b;
for(int i=0; i<n; i++) {
in.nextToken();
m[i][2] = (int)in.nval;
in.nextToken();
a = (int)in.nval;
in.nextToken();
b = (int)in.nval;
m[i][0] = i+1;
m[i][1] = m[i][2]+a+b;
}
sort(0,n-1);//总分排序
sorts();//语文成绩、学号排序
if(n>=5) {
for(int i=0; i<5; i++) {
pr.println(m[i][0]+" "+m[i][1]);
}
pr.flush();
}
//考虑申请人数不足5人的情况
else {
for(int i=0; i<n; i++) {
pr.println(m[i][0]+" "+m[i][1]);
}
pr.flush();
}
}
}