关于这个题目,网上大部分都是用结构体做的,先把名字排序,最后再把分数排序,思路不难,但实现稍微繁琐,我这里用的是用pair实现的,思路同结构体,但整体显得小巧。
#include
#include
#include <math.h>
#include
#include
#include
using namespace std;
pair<string, int>p[25];
bool cmp(const pair<string, int> &a, pair<string, int> &b) {
if (a.second == b.second) //如果a和b的分数相等 返回那个字典序小的
return a.first < b.first;
else
return a.second > b.second;//分数不相等就把大的排在前
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int grade;
string name;
cin >> name >> grade; //输入名字以及分数
p[i] = {name, grade};
}
sort(p, p + n, cmp); //按照题目要求进行排序,其中cmp函数为排序要求;
for (int i = 0; i < n; i++) {
cout << p[i].first << ’ ’ << p[i].second; //按照要求输出
puts(""); //换行
}
return 0;
}
第一次写题解,希望有帮助。(不喜勿喷)