解题思路:

注意事项:

参考代码:

public class Main { 

    public static void main(String[] args) { 

        Scanner sc = new Scanner(System.in); 

        // 输入学生人数和求第 k 名学生

        int n = sc.nextInt(); // 输入学生人数

        int k = sc.nextInt(); // 输入要求的名次 k

        int[] ids = new int[n]; // 存储学生学号的数组

        double[] scores = new double[n]; // 存储学生成绩的数组

        // 输入学生信息并存入数组

        for (int i = 0; i < n; i++) { 

            ids[i] = sc.nextInt(); // 输入学生的学号

            scores[i] = sc.nextDouble(); // 输入学生的成绩

        }

        // 对成绩进行排序,同时对学号进行相应的交换

        for (int i = 0; i < n - 1; i++) { // 进行 n-1 轮排序

            for (int j = i + 1; j < n; j++) { // 将当前排序轮次的第 i 位数与剩下的 n-i-1 个数进行比较

                if (scores[i] < scores[j]) { // 如果当前数比后面的数要小

                    double tempScore = scores[i]; // 声明一个临时变量,用于交换两个元素的值

                    scores[i] = scores[j]; // 将后面的数赋值给前面的数

                    scores[j] = tempScore; // 将前面的数赋值给后面的数

                    int tempId = ids[i]; // 交换学号的值,与成绩的值保持一致

                    ids[i] = ids[j];

                    ids[j] = tempId;

                }

            }

        }

        // 输出第 k 名学生的学号和成绩

        System.out.println(ids[k -1] + " " + scores[k -1]); //数组下标从0开始,而学号是从1开始,所以k-1

    }

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论