ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PTA 乙级 1080 MOOC期终成绩 (25 分) C++

2021-10-08 19:04:28  阅读:180  来源: 互联网

标签:tmp 25 MOOC 1080 grade sum sort students id


 

 想着一个学号对应一个学生信息,于是就用了map来进行数据的输入,然后新建一个map来存储获得证书的学生的信息,由于map无法进行排序,所以把获取整数的数据又转换为vector进行sort排序之后进行输出

vector使用

map使用

注意

  • 题中所说的如果总评分数相同则按照学号递增进行排序
  • round进行四舍五入
  • 学生期中成绩有0分的可能

C++

 1 #include <iostream>
 2 #include <string>
 3 #include <map>
 4 #include <cmath>
 5 #include <vector>
 6 #include <algorithm>
 7 
 8 using namespace std;
 9 struct grade {
10     int mid, final, online, sum_grade;
11 } tmp_grade;
12 
13 //sort的比较函数,总评高的在前,总评相同按学号字典序排名
14 bool cmp(pair<string, grade> a, pair<string, grade> b) {
15     if(a.second.sum_grade == b.second.sum_grade) return a.first < b.first;
16     return a.second.sum_grade > b.second.sum_grade;
17 }
18 
19 int main() {
20     int P = 0, M = 0, N = 0;
21     map<string, grade> students_grade;
22     map<string, grade> Certificate;
23     cin >> P >> M >> N;
24     tmp_grade = {-1, -1, -1, -1};
25     for (int i = 0; i < P; ++i) {
26         string id;
27         cin >> id >> tmp_grade.online;
28         students_grade.insert(pair<string, grade>(id, tmp_grade));
29         tmp_grade.online = -1;                                          //每轮清除输入,方便下一次输入
30     }
31 
32     for (int i = 0; i < M; ++i) {
33         string id;
34         cin >> id >> tmp_grade.mid;
35         if (students_grade.find(id) == students_grade.end()) students_grade.insert(pair<string, grade>(id, tmp_grade));
36         else students_grade[id].mid = tmp_grade.mid;                    //如果学号存在,直接输入,不存在则在map中插入
37         tmp_grade.mid = -1;
38     }
39 
40     for (int i = 0; i < N; ++i) {
41         string id;
42         cin >> id >> tmp_grade.final;
43         if (students_grade.find(id) == students_grade.end()) students_grade.insert(pair<string, grade>(id, tmp_grade));
44         else students_grade[id].final = tmp_grade.final;
45 
46         if (students_grade[id].mid > students_grade[id].final)
47             students_grade[id].sum_grade = round(students_grade[id].mid * 0.4 + students_grade[id].final * 0.6);
48         else
49             students_grade[id].sum_grade = students_grade[id].final;
50 
51         if (students_grade[id].online >= 200 && students_grade[id].sum_grade >= 60)     //创建新的map来保存获取合格证书的学生
52             Certificate.insert(pair<string, grade>(id, students_grade[id]));
53         tmp_grade.final = -1;
54     }
55 
56     vector< pair<string,grade> > v_sort(Certificate.begin(), Certificate.end());        //map无法用sort函数,于是转换为vector进行排序输出
57     sort(v_sort.begin(), v_sort.end(), cmp);
58     for (auto it = v_sort.begin(); it != v_sort.end(); ++it)                            //auto它不香嘛
59         cout << it->first << ' ' << it->second.online << ' '
60              << it->second.mid << ' ' << it->second.final << ' ' << it->second.sum_grade << endl;
61     return 0;
62 }

 

标签:tmp,25,MOOC,1080,grade,sum,sort,students,id
来源: https://www.cnblogs.com/SCP-514/p/15381312.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有