ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

华为机试HJ68:成绩排序

2021-09-12 19:03:28  阅读:194  来源: 互联网

标签:sort second 华为 student 70 pair 机试 排序 HJ68


作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

例示:
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;
}

标签:sort,second,华为,student,70,pair,机试,排序,HJ68
来源: https://blog.csdn.net/zhaitianbao/article/details/120253449

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有