直接暴力解题了😊🤣😒,,,已经通过10AC,,,希望能对你们有帮助
import java.util.Scanner;
public class Main {
//洛谷刷题专用
public static void main(String[] args) {
// io命令行,拿扫描器,按行读取
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int arr[][] = new int[size][3];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < 3; j++) {
arr[i][j] = scanner.nextInt();
}
}
// 使用二维数组?
// 关闭扫描器
scanner.close();
int temp[][];
temp = compare(arr);
for (int i = 0; i < temp.length; i++) {
for (int j = 0; j < 1; j++) {
System.out.print(temp[i][j] + " " + temp[i][j + 1]);
}
System.out.println();
}
}
// 比较方法,再用一个二维数组存储排序数据,最终将中间数组输出
public static int[][] compare(int arr[][]) {
int temp[][] = new int[5][2];
int counter = 1;
// 先按总分从高到低排序,
int provite[][] = new int[arr.length][2];
// 用一维数组储存总分,将一维数组下标当作对应同学的下标
for (int i = 0; i < arr.length; i++) {
provite[i][0] = counter++;
for (int j = 0; j < arr[0].length; j++) {
provite[i][1] += arr[i][j];// 完成对总分以及下标的记录
}
}
// 比较
int t[][] = new int[1][2];// 存储变量
int max = 0;// 比较值
for (int j = 0; j < 5; j++) {
for (int i = 0; i < provite.length; i++) {
// 找到就清零,一共要找五次,
if (max < provite[i][1]) {
max = provite[i][1];
t[0][0] = provite[i][0];
t[0][1] = provite[i][1];
}
}
provite[t[0][0]-1][1] = 0;// 归零
max=0;
// 找到最大值
// 给与输出数组
temp[j][0] = t[0][0];// 编号
temp[j][1] = t[0][1];// 总分
}
// 最终得到前五名的编号与中分
// 如果两个同学总分相同,再按语文成绩从高到低排序,
int assist = 0;// 辅助变量
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (temp[i][1] == temp[j][1]) {
// 比较语文成绩
if (arr[temp[i][0]-1][0] < arr[temp[j][0]-1][0]) {
// 说明前者的语文成绩比后者的低,交换位置
assist = temp[i][0];
temp[i][0] = temp[j][0];
temp[j][0] = assist;
assist = temp[i][1];
temp[i][1] = temp[j][1];
temp[j][1] = assist;
} else {
// 如果两个同学总分和语文成绩都相同,
// 那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的
if (arr[temp[i][0]-1][1] == arr[temp[j][0]-1][1]) {
if (temp[i][0] > temp[j][0]) {
// 说明前者的序号比后者大,要交换位置
assist = temp[i][0];
temp[i][0] = temp[j][0];
temp[j][0] = assist;
assist = temp[i][1];
temp[i][1] = temp[j][1];
temp[j][1] = assist;
} // 其余不用处理
}
}
}
}
}
return temp;
}
}