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期终成绩的主要内容,如果未能解决你的问题,请参考以下文章