牛客华为算法-HJ68 成绩排序

我爱海鲸 2025-04-22 14:37:01 暂无标签

简介华为od

成绩排序_牛客题霸_牛客网

描述

对于给出的 n 位同学的姓名和成绩,根据输入要求,按成绩升序或降序排列。

输入描述:

第一行输入一个整数 n(1≦n≦200) 代表学生人数。
第二行输入一个整数 op(0≦op≦1) 代表排序方式,其中,0 表示按成绩降序,1 表示按成绩升序。
此后 n 行,第 i 行输入一个长度为 1≦len(si)≦20、由大小写字母混合构成的字符串 si 代表第 i 个学生的姓名。随后,在同一行输入一个整数 ai(1≦ai≦100) 代表这个学生的成绩。

除此之外,保证输入数据中不存在重复的学生姓名。

输出描述:

根据输入的排序方式,按照成绩升序或降序输出所有学生的姓名和成绩。对于每一名学生,新起一行。输出学生的姓名和成绩,用空格分隔。

解法一:(java)

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int num = in.nextInt();
        int order = in.nextInt();

        List<Map.Entry<String,Integer>> list = new ArrayList<>();

        while (in.hasNext()) { // 注意 while 处理多个 case
            String name = in.next();
            int g = in.nextInt();
            Map<String,Integer> map = new HashMap<>();
            map.put(name,g);
            Set<Map.Entry<String,Integer>> set =  map.entrySet();
            list.add(set.iterator().next());
        }

        
        if (order == 0) {
            // 降序
            list.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
        } else {
            // 升序
            list.sort(Map.Entry.comparingByValue());
        }

        for (Map.Entry<String,Integer> m : list) {
            System.out.println(m.getKey() + " " + m.getValue());
        }
    }
}

思路:定义一个List<Map.Entry<String,Interger>> 用于保存名字和成绩,把数据放到这个list中,然后通过Map.Entry.comparingByValue进行值得排序,然后输出即可。

你好:我的2025