成绩排序

成绩排序

http://www.nowcoder.com/questionTerminal/8e400fd9905747e4acc2aeed7240978b

例示中“{}”括住的部分是原题目中bug的一点,在这里我卡了一下,大家可以参考。
题目描述
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
例示:
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代表从低到高

题解:

#include <bits/stdc++.h>
using namespace std;
bool cmp0(vector<int> a, vector<int> b){
    if(a[0]==b[0]) //如果有几个人的分数是一样的,先录入的在前
        return a[1]<b[1];
    else return a[0]>b[0];  //分数不同,则正常看要求排序
}
bool cmp1(vector<int> a, vector<int> b){
    if(a[0]==b[0]) return a[1]<b[1];
    else return a[0]<b[0];
}
int main(){
    ios::sync_with_stdio(false);
    int n;
    while(cin>>n){
        int flag;
        cin >>flag;
        vector<string> name(n);
        vector<vector<int>> score(n, vector<int>(2));
        //建立一个包含录入顺序和分数的二维数组,行数为人数,列数为2
        for(int i=0; i<n; i++){
            cin >> name[i];
            score[i][1]=i;
            cin >> score[i][0];
        }
        if(flag==0){
            sort(score.begin(), score.end(), cmp0);
            for(int i=0; i<n; i++)
                cout << name[score[i][1]] << " " <<score[i][0] <<endl;
        }
        else{
            sort(score.begin(), score.end(), cmp1);
            for(int i=0; i<n; i++)
                cout << name[score[i][1]] << " " <<score[i][0] <<endl;
        }

    }
}
全部评论

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务