OJ-0730

参考

import java.util.*;

class Main {
    // 存储学生信息和成绩的结构体
    static class Student {
        String name; // 学生名字
        List<Integer> scores; // 每门课成绩
    }

    static Student[] students = new Student[10004]; // 存储学生信息的数组
    static int keyIndex; // 要排序的课程名的下标

    // 自定义排序函数
    static Comparator<Student> studentComparator = new Comparator<Student>() {
        @Override
        public int compare(Student a, Student b) {
            if (!a.scores.get(keyIndex).equals(b.scores.get(keyIndex))) {
                return b.scores.get(keyIndex) - a.scores.get(keyIndex);
            }
            return a.name.compareTo(b.name);
        }
    };

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] courseNames = new String[1000]; // 课程名数组
        int n, m; // 学生数量和课程数量
        n = sc.nextInt();
        m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            courseNames[i] = sc.next(); // 读入课程名字
        }
        for (int i = 1; i <= n; i++) {
            students[i] = new Student();
            students[i].name = sc.next(); // 读取学生名字
            int sum = 0;
            students[i].scores = new ArrayList<>();
            for (int j = 0; j < m; j++) {
                int score = sc.nextInt();
                students[i].scores.add(score); // 读取每门课成绩
                sum += score;
            }
            students[i].scores.add(sum); // 将总分放入成绩数组末尾
        }
        String key = sc.next(); // 要排序的课程名
        keyIndex = m; // 若没找到,赋值为最后一个位置,也就是总分
        for (int i = 0; i < m; i++) { // 寻找这个课程名的下标
            if (courseNames[i].equals(key)) {
                keyIndex = i;
                break;
            }
        }
        Arrays.sort(students, 1, n + 1, studentComparator); // 排序
        for (int i = 1; i <= n; i++) {
            System.out.print(students[i].name);
            if (i == n) System.out.println();
            else System.out.print(" ");
        }
    }
}

https://blog.csdn.net/weixin_52908342/article/details/135375754

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值