Loading

计算机考研复试真题 成绩排序

题目描述

查找和排序

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

示例:
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(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:

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

示例1

输入

3
0
fang 90
yang 50
ning 70

输出

fang 90
ning 70
yang 50

--------------------------------------------------------------------------------------------------------------------------

/*
解题思路:貌似用二维向量+桶排序能解决,但是还没学习,先码住以后再看。
        大概思路就是用一个二维向量,把每个分数连带姓名存在向量里,升序的话就顺序输出向量(即二维数组),降序的话就反序输出即可,
        这大概就是桶排序也成基数排序的思想,适用于分布均匀的元素。
*/
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
 
int main(){
    int n;
    while(cin >> n){
        int flag;
        cin >> flag;
        string name;
        int score;
        vector<vector<string> > students(101, vector<string>());
        for(int i = 0;i < n;i++){
            cin >> name >> score;
            students[score].push_back(name);
        }
        if(flag){
            for(int i = 0;i < students.size();i++){             
                for(int j = 0;j < students[i].size();j++)
                    cout << students[i][j] << " " << i << endl;
            }
        }
        else{
            for(int i = students.size() - 1;i >= 0;i--){            
                for(int j = 0;j < students[i].size();j++)
                    cout << students[i][j] << " " << i << endl;
            }
        }     
    }
    return 0;
}

 

 
posted @ 2018-11-07 15:49  Parzulpan  阅读(452)  评论(0编辑  收藏  举报