成绩排序

成绩排序

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;
        }

    }
}
全部评论

相关推荐

小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务