1137 Final Grading
阿新 • • 發佈:2018-09-01
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