在某个班的一次考试中,n(n<10)个学生的考试成绩都不相同,现知道了每个学生的学号和成绩,
求考第k名学生的学号和成绩。
输入
3(班级共n名学生)
200901 86
200902 89
200903 87
2(第k名学生)
输出
200902 89
第一个版本: 以1为排头。也就是说第一名是1第二名是2
#include <iostream>
#include <windows.h>
using namespace std;
struct information
{
int numer;
double score;
}s[10];
int main()
{
int m;
cout << "请输入几名同学:" << endl;
cin >> m;
for (int i = 0; i < m; i++)
{
cout << "请输入第" << i + 1 << "名的学号、成绩" << endl;
cin >> s[i].numer >> s[i].score;
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m - 1 - i; j++)
{
if (s[j].score>s[j+1].score)
{
double t;
t = s[j].score;
s[j].score = s[j + 1].score;
s[j + 1].score = t;
}
int t;
}
}
int n;
cout << "请输入你要查询第几名" << endl;
cin >> n;
cout << s[n-1].numer <<" "<< s[n - 1].score << endl;
}
这就是一个排序的问题。
1-用一个二位数组把学生信息存储下来
2-对数组进行排序,参与排序每个对象都是是一个数组,以数组的第二个元素成绩的大小决定数组的大小
3-从排序后的数组中选择第k个一维数组就是要的结果
map<序号,学生信息(学号,成绩)>
map.find("序号")
考第二名的不是200903 87吗?
#include<bits/stdc++.h>
using namespace std;
struct node//结构体数组存每个学生的学号和成绩
{
string s;
int m;
}a[10];
bool cmp(node a,node b)//自定义排序函数
{
return a.m>b.m;//按分数排序
}
int main()
{
int n,k;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i].s>>a[i].m;
cin>>k;
sort(a,a+n,cmp);//按分数排序
cout<<a[k-1].s<<" "<<a[k-1].m;//输出考第k名的学号和成绩
return 0;
}