PAT(Advanced Level)A1137. Final Grading

题意

要过关要求在线编程的分数>200,而且最后分数要≥60才算过关,最后要按照要求的顺序输出

思路

  • 可以用一个结构体struct来表示学生的成绩,按照题目的要求读入不同的成绩,按照给定的公式计算总分即可。

代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <cmath>
using namespace std;
struct stu {
    string id;
    int gp, gmid, gfn, g;
    // 默认没有成绩就是-1分
    stu(): gp(-1), gmid(-1), gfn(-1), g(-1){}
};
unordered_map<string, stu> mp;
int main() {
    int P, M, N;
    scanf("%d %d %d", &P, &M, &N);
    string s;
    for(int i = 0; i < P; i++) {
        cin >> s;
        scanf("%d", &mp[s].gp);
        
    }
    for(int i = 0; i < M; i++) {
        cin >> s;
        scanf("%d", &mp[s].gmid);
    }
    for(int i = 0; i < N; i++) {
        cin >> s;
        scanf("%d", &mp[s].gfn);
    }
    
    //将统计好的信息放入vector里面进行排序
    vector<stu> v;
    for(auto it: mp) {
        if(it.second.gmid > it.second.gfn) {
            it.second.g = round(0.4 * it.second.gmid + 0.6 * it.second.gfn);
        }else {
            it.second.g = it.second.gfn;
        }
        it.second.id = it.first;
        v.emplace_back(it.second);
    }
    sort(v.begin(), v.end(), [&](stu x, stu y) {
        if(x.g == y. g)
            return x.id < y.id;
        else
            return x.g > y.g;
    });
    for(auto it: v) {
        if(it.g < 60 || it.gp < 200)   continue;
        printf("%s %d %d %d %d
", it.id.c_str(), it.gp, it.gmid, it.gfn, it.g);
    }
    return 0;
}
如有转载,请注明出处QAQ
原文地址:https://www.cnblogs.com/MartinLwx/p/14518147.html