华为机试HJ68:成绩排序

简介: 华为机试HJ68:成绩排序

题目描述:

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩

都按先录入排列在前的规则处理。

例示:

jack      70

peter     96

Tom       70

smith     67


从高到低  成绩

peter     96

jack      70

Tom       70

smith     67


从低到高


smith     67


jack      70


Tom       70


peter     96


注:0代表从高到低,1代表从低到高


本题含有多组输入数据!


输入描述:

输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例:

输入:

3

0

fang 90

yang 50

ning 70


输出:

fang 90

ning 70

yang 50

解题思路:

本题是排序题。用vector容器存放学生信息,pair的第一个参数为学生名字,第二个参数为学生分数;用stable_sort对容器排序,自定义排序算法,比较pair的second,也就是比较分数;之后输出student容器内容,完成。


之所以用stable_sort是因为它更稳定,基于归并排序实现,而sort是基于快速排序;stable_sort在处理相同值时不会改变其原本的相对位置,正好符合题意。

测试代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    int number;
    int flag;
    while(cin>>number>>flag)
    {
        vector<pair<string,int>> student;
        for(int i=0;i<number;++i)
        {
            pair<string,int> temp;
            cin>>temp.first;
            cin>>temp.second;
            student.push_back(temp);
        }
        if(flag)
        {
            stable_sort(student.begin(),student.end(), [](const pair<string,int>& v1, const pair<string,int>& v2){
                return v1.second < v2.second;
            });
        }
        else{
            stable_sort(student.begin(),student.end(), [](const pair<string,int>& v1, const pair<string,int>& v2){
                return v1.second > v2.second;
            });
        }
        for(auto it=student.begin();it!=student.end();++it)
        {
            cout<<(*it).first<<" "<<(*it).second<<endl;
        }
    }
    return 0;
}


相关文章
|
7月前
|
算法
华为机试HJ14:字符串排序
华为机试HJ14:字符串排序
|
7月前
|
人工智能
华为机试HJ26:字符串排序
华为机试HJ26:字符串排序
|
3月前
|
人工智能
PTA-排序问题
排序问题
13 0
|
5月前
【每日一题Day188】LC2418按身高排序 | 排序
【每日一题Day188】LC2418按身高排序 | 排序
20 0
|
7月前
|
容器
华为机试HJ94:记票统计
华为机试HJ94:记票统计
|
7月前
华为机试HJ88:扑克牌大小
华为机试HJ88:扑克牌大小
|
7月前
|
容器
华为机试HJ93:数组分组
华为机试HJ93:数组分组
|
7月前
华为机试HJ100:等差数列
华为机试HJ100:等差数列
|
7月前
|
机器学习/深度学习
华为机试HJ35:蛇形矩阵
华为机试HJ35:蛇形矩阵
|
7月前
华为机试HJ42:学英语
华为机试HJ42:学英语