题目:
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
输入
第一行有两个整数,分别是学生的人数n(1≤n≤10000),和求第k名学生的k(1≤k≤n)。
其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g格式输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4
样例输入
1 1
90788001 67.888
样例输出
90788001 67.888
参考代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
float score;
} Student;
// 比较函数,用于qsort按成绩降序排序
int compare(const void *a, const void *b)
{
Student *studentA = (Student *)a;
Student *studentB = (Student *)b;
// 按成绩降序排序
if (studentA->score < studentB->score) return 1;
else if (studentA->score > studentB->score) return -1;
else return 0;
}
int main()
{
int n, k;
// 读取学生人数和排名k
scanf("%d %d", &n, &k);
Student students[n];
// 读取每个学生的学号和成绩
for (int i = 0; i < n; i++)
{
scanf("%d %f", &students[i].id, &students[i].score);
}
// 使用qsort对学生按成绩进行降序排序
qsort(students, n, sizeof(Student), compare);
// 获取第k名的学生(注意k是从1开始的)
Student kth_student = students[k - 1];
// 输出第k名学生的学号和成绩
printf("%d %g\n", kth_student.id, kth_student.score);
return 0;
}
标签:数据结构,学号,int,PTA,学生,score,Student,成绩
From: https://blog.csdn.net/2302_79908382/article/details/139661456