Q:
有一个二维表格数据,它的值全部是整数,其中存储了若干个选手参与5分钟汉字输入比赛的成绩。数据中每一行是一条记录,每条记录包含两个整数,第1个整数为选手编号,它应该是一个4位整数;第2个整数是汉字输入比赛成绩,应该是一个小于等于1000的非负整数。数据中每个选手最多可能有2条记录。编写程序删除数据中的无效记录和每个选手的多余记录,每个选手只保留有效成绩中成绩最高的一条记录,然后返回成绩排名第2的选手编号(当成绩相同时编号小的选手在前),如果不足2个选手,则返回第1的选手编号。注意:测试数据保证按照要求删除数据后,至少有一条记录。
相关说明 | |
输入条件 |
|
输出要求 |
|
其它要求 |
将代码写入函数func4 |
测试用例:
输入 |
返回 |
[[1,2] ,[1022,888]] |
1022 |
[[1,2],[1022,888],[1011,888]] |
1022 |
[[1,2],[1011,888],[1011,800]] |
1011 |
[[1,2],[1011,888],[1011,800],[1025,45]]文章来源:https://www.toymoban.com/news/detail-653854.html |
1025文章来源地址https://www.toymoban.com/news/detail-653854.html |
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
//=================================================
// 说明:编程题4
// 参数说明: vector<vector<int> >& records: 二维整型向量,每一行表示一条记录
// 返回值: 返回成绩排名第2的选手编号(当成绩相同时编号小的选手在前)
//=================================================
int cmp(pair<int,int> p1,pair<int,int> p2){
if (p1.second == p2.second)return p1.first<=p2.first;
return p1.second>=p2.second;
}
int func4(vector<vector<int> >& records)
{
unordered_map<int,int> valid_records;
for (auto r : records){
int id = r[0];
int score = r[1];
if (score>=0 && score<=1000){
if (valid_records.find(id)!= valid_records.end())valid_records[id] = max(score,valid_records[id]);
else valid_records[id] = score;
}
}
vector<pair<int,int>> result;
for (auto vr : valid_records)result.push_back(make_pair(vr.first,vr.second));
sort(result.begin(),result.end(),cmp);
if (result.size()>1)cout<<result[1].first;
else cout<<result[1].first;
}
int main(){
vector<vector<int> > records;
records.push_back({1,2});
records.push_back({1011,800});
records.push_back({1015,888});
records.push_back({1011,888});
records.push_back({1025,45});
func4(records);
}
到了这里,关于c++ 成绩统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!