zoukankan      html  css  js  c++  java
  • 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
    ", 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/

    欢迎讨论和交流!


  • 相关阅读:
    DS博客作业--线性表
    c博客06-2019-结构体&文件
    C语言博客作业03--函数
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业2--线性表
    c博客06-结构体&文件
    C语言博客作业—2019-指针
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13580283.html
Copyright © 2011-2022 走看看