

问题描述: 刚举行的万米长跑活动中,有 N 个人跑完了全程,所用的时间都不相同。颁奖时为了增加趣味性,随机抽了一个数 K,要奖励第 K 名一双跑鞋。 现在组委会给你 N 个人的姓名、成绩(用时,单位是秒),请你编程快速输出第 K 名的姓名。
输入格式: 第一行:2 个整数 N 和 K。 下面 N 行:每行第 1 个是字符串表示姓名; 第 2 个是个整数,表示这个人跑完的使用时间。
输出格式: 一行,第 K 名的姓名。
数据范围: 1≤K≤N≤100。
样例输入:
5 3
lisi 2306
zhangsan 3013
wangwu 3189
suantoujun 4012
zhaoliu 2601样例输出:
zhangsan参考程序
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct T {
string name;
int s;
} stu[101];
bool cmp(T a,T b) {
return a.s < b.s;
}
int main() {
int n,k; cin>>n>>k;
for (int i=0; i<n; i++) {
cin>>stu[i].name>>stu[i].s;
}
sort(stu, stu+n, cmp);
cout<<stu[k-1].name<<endl;
return 0;
}题目描述 考试结束后,同学们的成绩都不一样,知道了学生的考号以及分数,找出谁是第N名。 输入描述 第一行有两个整数,分别是学生的人数m(1≤m≤100),和求第N名学生的(1≤N≤m)。 其后有m行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。 输出描述 输出第N名学生的学号和成绩,中间用空格分隔。 样例 输入
5 3 90788001 67.8 90788002 90.3 90788003 61 90788004 68.4 90788005 73.9
输出
90788004 68.4
#include <iostream>
#include <algorithm>
using namespace std;
// 定义结构体来存储学生的学号和成绩
struct Student {
int id;
double score;
};
// 自定义比较函数,用于按照成绩从高到低排序
bool compare(Student a, Student b) {
return a.score > b.score;
}
int main() {
int m, n;
cin >> m >> n;
// 定义静态结构体数组来存储学生信息
Student students[100];
for (int i = 0; i < m; i++) {
cin >> students[i].id >> students[i].score;
}
// 使用sort函数结合自定义比较函数进行排序
sort(students, students + m, compare);
// 输出第N名学生的学号和成绩
cout << students[n - 1].id << " " << students[n - 1].score << endl;
return 0;
}题目描述 一年一度的江苏省小学生程序设计比赛开始了,组委会公布了所有学生的成绩,成绩按分数从高到低排名,成绩相同按年级从低到高排名。现在主办单位想知道每一个排名 的学生前,有几位学生的年级低于他。
输入描述 第一行只有一个正整数n(1<=n<=200),表示参数的学生人数 第2~n+1行,每行有两个正整数s(0<=s<=400)和g(1<=g<=6),之间用一个空格隔开,其中第i+1行的第一个数s表示第i个学生的成绩,第i+1行的第二个数g表示第i个学生的年级
输出描述 输出n行,每行只有一个正整数,其中第i行的数k表示排第i名的学生前面有k个学生排名比他高,且年级比他低
样例 输入
5 300 5 200 6 350 4 400 6 250 5
输出
0 0 1 1 3
参考代码
#include <iostream>
#include <algorithm>
using namespace std;
// 定义结构体来存储学生的成绩和年级信息
struct Student {
int score;
int grade;
};
// 自定义比较函数,先按成绩从高到低排序,成绩相同按年级从低到高排序
bool compare(Student a, Student b) {
if (a.score!= b.score) {
return a.score > b.score;
}
return a.grade < b.grade;
}
int main() {
int n;
cin >> n;
// 定义静态数组来存储学生信息
Student students[200];
for (int i = 0; i < n; i++) {
cin >> students[i].score >> students[i].grade;
}
// 使用sort函数按照自定义规则进行排序
sort(students, students + n, compare);
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < i; j++) {
if (students[j].grade < students[i].grade) {
count++;
}
}
cout << count << endl;
}
return 0;
}题目描述 可达鸭如火如荼地进行了编程比赛,通过二轮测试的同学将会得到丰厚的礼品,首先根据一轮测试的结果划定一个分数线,分数线根据最终得奖人数的150%划定,即如果计划最终得奖人数为m名,则分数线为排名第m*150%(向下取整)名的选手的分数。请你划定一下这个编程比赛的分数线,输出可以有机会得到礼品的同学的报名号和成绩。
输入描述 第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加一轮测试的学生总数,m 表示最终得奖人数。输入数据保证m*150%向下取整后小于等于n。 第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是学生的报名号k(1000 ≤ k ≤ 9999)和该学生的一轮测试成绩s(1 ≤ s ≤ 100)。数据保证学生的报名号各不相同.
输出描述 第一行,有两个整数,用一个空格隔开,第一个整数表示进入二轮测试的分数线;第二个整数为进入二轮测试的学生实际人数 从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入二轮测试的学的的报名号和一轮测试成绩,按照成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。 样例 输入
6 3 1000 90 3239 88 2390 95 7231 84 1005 95 1001 88
输出
88 5 1005 95 2390 95 1000 90 1001 88 3239 88
#include <iostream>
#include <algorithm>
using namespace std;
// 定义结构体来存储学生的报名号和成绩信息
struct Student {
int id;
int score;
};
// 自定义比较函数,先按成绩从高到低排序,成绩相同按报名号从小到大排序
bool compare(Student a, Student b) {
if (a.score!= b.score) {
return a.score > b.score;
}
return a.id < b.id;
}
int main() {
int n, m;
cin >> n;
cin >> m;
// 定义静态数组来存储学生信息
Student students[5000];
for (int i = 0; i < n; i++) {
cin >> students[i].id >> students[i].score;
}
// 使用sort函数按照自定义规则进行排序
sort(students, students + n, compare);
// 计算分数线对应的索引,向下取整
int cutIndex = m * 150 / 100;
int cutScore = students[cutIndex - 1].score;
int count = 0;
for (int i = 0; i < n; i++) {
if (students[i].score >= cutScore) {
count++;
}
}
// 输出分数线和进入二轮测试的学生实际人数
cout << cutScore << " " << count << endl;
// 输出进入二轮测试的学生的报名号和成绩
for (int i = 0; i < n; i++) {
if (students[i].score >= cutScore) {
cout << students[i].id << " " << students[i].score << endl;
}
}
return 0;
}