1. 程式人生 > >1137 Final Grading

1137 Final Grading

ifstream 數據 結構 https 學生 cin truct targe stream

題意:排序題。

思路:通過unordered_map來存儲考生姓名與其成績信息結構體的映射,成績初始化為-1,在讀入數據時更新各個成績,最後計算最終成績並把符合條件的學生存入vector,再排序即可。需要註意的是,計算最終成績時記得"G must be rounded up to an integer"。關於取整函數,總結在這裏。

代碼:

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include 
<cmath> #include <fstream> using namespace std; struct Student{ string id; int Gp,Gm,Gf,Gtot; Student():id(""),Gp(-1),Gm(-1),Gf(-1),Gtot(0){} }; unordered_map<string,Student> mp; vector<Student> stu; bool cmp(Student a,Student b) { if(a.Gtot!=b.Gtot) return a.Gtot>b.Gtot;
else return a.id<b.id; } int main() { //ifstream cin("pat.txt"); int p,m,f; cin>>p>>m>>f; string id; int score; for(int i=0;i<p;i++){ cin>>id>>score; mp[id].id=id; mp[id].Gp=score; } for(int i=0;i<m;i++){ cin
>>id>>score; mp[id].id=id; mp[id].Gm=score; } for(int i=0;i<f;i++){ cin>>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<<it.id<<" "<<it.Gp<<" "<<it.Gm<<" "<<it.Gf<<" "<<it.Gtot<<"\n"; return 0; }

1137 Final Grading