p.s.个人收录用
题目描述
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第K名学生的学号和成绩
输入
第一行有两个整数,分别是学生的人数n(1≤n≤100)n(1≤n≤100),和求第k名学生的k(1≤k≤n)k(1≤k≤n)。
其后有nn行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入 Copy
5 3 90788001 67.8 90788002 90.3 90788003 61 90788004 68.4 90788005 73.9
样例输出 Copy
90788004 68.4
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <string.h>
//谁考了第K名
struct student {
int id;
double score;
}a[105];
int main()
{
int n, k;
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d%lf", &a[i].id, &a[i].score);
for (int i = 2; i <= n; i++)
{
int j;
for (j = i - 1; j >= 1; j--)
{
if (a[i].score < a[j].score)
break;
}
if (j != i - 1)
{
struct student stu = a[i];
for (int m = i - 1; m > j; m--)
{
a[m + 1] = a[m];
}
a[j + 1] = stu;
}
}
printf("%d %g\n", a[k].id, a[k].score);
}