1080 MOOC期终成绩

Posted keep23456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1080 MOOC期终成绩相关的知识,希望对你有一定的参考价值。

这是一道常规体了。

PAT乙级最后一道大题一般是 结构体+排序 +字符串+hash

 1 #include<iostream>
 2 #include<unordered_map>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 
 7 struct Student {
 8     string id;
 9     int GP = -1,GM = -1,GF = -1,G = -1;
10     bool flag = false;//不合格
11 } stu[10010];
12 int num = 0;
13 bool cmp(const Student& a,const Student& b){
14     if(a.flag != b.flag) return a.flag > b.flag;
15     if(a.G != b.G) return a.G > b.G;
16     return a.id < b.id;
17 }
18 
19 int main() {
20     int p,m,n,GP,GM,GF;
21     cin>>p>>m>>n;
22     string id;
23     unordered_map<string,int> mp;
24     for(int i = 0; i < p; ++i) {
25         cin>>id>>GP;
26         if(GP >= 200) {//记录在线编程分大于等于200 的学生 
27             stu[num].id = id;
28             stu[num].GP = GP;
29             mp[id] = num;//保持学生id与index的映射关系 
30             num++;
31         }
32     }
33     for(int i = 0; i < m; ++i) {//输入学生期中成绩 
34         cin>>id>>GM;
35         if(mp.count(id) == 1)//学生参加过在线编程 
36             stu[mp[id]].GM = GM;
37     }
38     for(int i = 0; i < n; ++i) {//输入学生期末成绩 
39         cin>>id>>GF;
40         if(mp.count(id) == 1)//学生参加过在线编程 
41             stu[mp[id]].GF = GF;
42     }
43     for(int i = 0; i < num; ++i) {//标记 “合格” 学生 
44         if(stu[i].GM > stu[i].GF) stu[i].G = round(stu[i].GM*0.4 + stu[i].GF*0.6);
45         else stu[i].G = stu[i].GF;
46         if(stu[i].G >= 60) stu[i].flag = true;//合格 
47     }
48     sort(stu,stu+num,cmp); 
49     for(int i = 0; i < num;++i){
50         if(stu[i].flag == true){
51             printf("%s %d %d %d %d
",stu[i].id.c_str(),stu[i].GP,stu[i].GM,stu[i].GF,stu[i].G);
52         }else break;
53     }
54     return 0;
55 }

技术图片

 

以上是关于1080 MOOC期终成绩的主要内容,如果未能解决你的问题,请参考以下文章

1080 MOOC期终成绩

1080. MOOC期终成绩 (25)

PAT乙级1080 MOOC期终成绩 (25 分)

PAT甲级1080 Graduate Admission (30 分)

单元测试MOOC

单元测试MOOC