1.谁考了第k名
题目描述
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第 k 名学生的学号和成绩。
输入格式
其后有 n 行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出格式
输出第 k 名学生的学号和成绩,中间用空格分隔。
输入样例
-
5 3
-
90788001 67.8
-
90788002 90.3
-
90788003 61
-
90788004 68.4
-
90788005 73.9
输出样例
-
90788004 68.4
#include<bits/stdc++.h>
using namespace std;
//冒泡排序
struct Student //定义声明结构体
{
int number; //学生学号
float score; //学生分数
};
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
struct Student classmate[101],val; //定义结构体数组(一群学生),和结构体变量(一个学生)
int n ,k;cin >> n >> k;
for(int i=1; i<=n; i++)
{
cin >> classmate[i].number;
cin >> classmate[i].score;
}
for(int i=1; i <=n; i++)
{
for(int j=1; j <= n-i; j++)
{
if(classmate[j].score < classmate[j+1].score)
{
val = classmate[j];
classmate[j] = classmate[j+1];
classmate[j+1] = val;
}
}
}
cout << classmate[k].number << " " << classmate[k].score;
return 0;
}
2.成绩排序
题目描述
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入格式
第一行为 n(0<n<20),表示班里的学生数目;
接下来的 n 行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过 20,成绩为一个不大于 100 的非负整数。
输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
输入样例
-
4
-
Kitty 80
-
Hanmeimei 90
-
Joey 92
-
Tim 28
输出样例
-
Joey 92
-
Hanmeimei 90
-
Kitty 80
-
Tim 28
#include<bits/stdc++.h>
using namespace std;
//冒泡排序
struct Student //定义声明结构体
{
string name; //学生姓名
int score; //学生分数
};
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
struct Student classmate[21],val; //定义结构体数组(一群学生),和结构体变量(一个学生)
int n ; cin >> n ;
for(int i=0; i<n; i++)
{
cin >> classmate[i].name;
cin >> classmate[i].score;
}
for(int i=0; i <n; i++)
{
for(int j=0; j < n-i-1; j++)
{
if(classmate[j].score < classmate[j+1].score)
{
val = classmate[j];
classmate[j] = classmate[j+1];
classmate[j+1] = val;
}
}
}
//从高到低输出
for(int i = 0 ; i < n ; i ++ )
{
cout << classmate[i].name << " " << classmate[i].score << "\n";
}
return 0;
}