题意:排序题。
思路:通过unordered_map来存储考生姓名与其成绩信息结构体的映射,成绩初始化为-1,在读入数据时更新各个成绩,最后计算最终成绩并把符合条件的学生存入vector,再排序即可。需要注意的是,计算最终成绩时记得"G must be rounded up to an integer"。关于取整函数,总结在。
代码:
#include#include #include #include #include #include #include using namespace std;struct Student{ string id; int Gp,Gm,Gf,Gtot; Student():id(""),Gp(-1),Gm(-1),Gf(-1),Gtot(0){}};unordered_map mp;vector stu;bool cmp(Student a,Student b){ if(a.Gtot!=b.Gtot) return a.Gtot>b.Gtot; else return a.id >p>>m>>f; string id; int score; for(int i=0;i >id>>score; mp[id].id=id; mp[id].Gp=score; } for(int i=0;i >id>>score; mp[id].id=id; mp[id].Gm=score; } for(int i=0;i >id>>score; mp[id].id=id; mp[id].Gf=score; } for(auto it:mp){ Student st=it.second; if(st.Gm>st.Gf) st.Gtot=round(st.Gm*0.4+st.Gf*0.6);//注意四舍五入 else st.Gtot=st.Gf; if(st.Gp>=200 && st.Gtot>=60) stu.push_back(st); } sort(stu.begin(),stu.end(),cmp); for(auto it:stu) cout< <<" "< <<" "< <<" "< <<" "< <<"\n"; return 0;}