PAT甲级1137Final Grading

题目链接

https://pintia.cn/problem-sets/994805342720868352/problems/994805345401028608

题解

题目要求

  • 要获得证书,一个学生的在线编程作业至少要拿到200分,最后评分G至少要拿到60分。

    如果期中分数大于期末分数,则G等于期中成绩乘以40%+期末成绩乘以60%,否则G等于期末成绩

  • 输入

    • 第一行

      三个数字,都不超过10000

      • P:完成网上在线作业的学生的数量
      • M:参加期中考试的学生的数量
      • N:参加期末考试的学生的数量
    • P个学生网上在线作业的成绩

    • M个学生期中考试的成绩

    • N个学生期末考试的成绩

  • 输出

    输出获得证书的学生的ID及其3个成绩,按G(四舍五入到整数)降序输出,如果G相等,则按ID升序输出。如果某学生某些成绩不存在,则输出-1

英语

  • assignment

    工作、任务

    分配、指派

  • certificate

    证明

  • round

    四舍五入

思路

  1. 先读取在线编程作业分数,如果小于200,就不记录该学生的信息
  2. 在第一步记录的学生范围内,记录其期中分数
  3. 在第一步记录的学生范围内,记录其期末分数,同时计算其最后分数G,如果G大于60,则存入vector
  4. 将vector排序
  5. 输出

代码

// Problem: PAT Advanced 1137
// URL: https://pintia.cn/problem-sets/994805342720868352/problems/994805345401028608
// Tags: unordered_map vector sort

#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

struct Student{
    string id;
    int gp=-1;
    int gm=-1;
    int gf=-1;
    int g=-1;
};

bool studentCmp(Student& s1, Student& s2){
    return s1.g == s2.g ? s1.id < s2.id : s1.g > s2.g;
}

int main()
{
    int p, m, n;
    unordered_map<string, Student> students_map;
    cin >> p >> m >> n;
    
    string str;
    int score;
    for (int i = 0; i < p; i++){
        cin >> str >> score;
        if (score >= 200){  // 在线编程分数大于200才行(不允许该分数不存在)
            students_map[str].id = str;
            students_map[str].gp = score;
        }
    }
    for (int i = 0; i < m; i++){
        cin >> str >> score;
        if (students_map.find(str) != students_map.end()) // 避免创建新的学生
            students_map[str].gm = score;
    }
    vector<Student> students_vec;
    for (int i = 0; i < n; i++){
        cin >> str >> score;
        if (students_map.find(str) != students_map.end()){ // 避免创建新的学生
            students_map[str].gf = score;
            if (students_map[str].gm > students_map[str].gf)
                students_map[str].g = round(students_map[str].gm * 0.4 + students_map[str].gf * 0.6);
            else
                students_map[str].g = students_map[str].gf;
            if (students_map[str].g >= 60)
                students_vec.push_back(students_map[str]);
        }
    }

    sort(students_vec.begin(), students_vec.end(), studentCmp);

    for (auto it = students_vec.begin(); it != students_vec.end(); it++)
        printf("%s %d %d %d %d\n", it->id.c_str(), it->gp, it->gm, it->gf, it->g);
    return 0;
}

参考链接

https://blog.csdn.net/weixin_44385565/article/details/88669948

https://blog.csdn.net/liuchuo/article/details/79064895


作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


posted @ 2020-08-28 23:18  臭咸鱼  阅读(135)  评论(0编辑  收藏  举报