PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)
題目鏈接:點擊查看
題目大意:分別給出a個學生的編程分數,b個學生的期中考試成績,c個學生的期末考試成績,有幾個規則:
滿足以上規則的情況下,從大到小輸出合格的學生信息
題目分析:思路簡單的一道模擬題,就因為這個題目將學號變為了字符串就上升了一個難度,如果是四位或五位的數字的話我們可以直接開結構體然后儲存信息,但既然學號變為了字符串,我們就不得不用map映射到結構體上,最后從map導出到vector中方便排序,最后就可以直接輸出了,思路簡單,但實現起來有點亂(指的是代碼看起來比較亂),但身為stl依賴癥患者,表示寫起來非常順暢
有個小細節需要注意一下,題目要求合格的人是在四舍五入后大于等于60的人,也就是說一個學生考了59.9分,也是算入合格的名單中的(emmm?如果現實真這樣該多好啊),這個小細節對應著測試點3,我們只需要在結構體儲存總評的時候用int儲存就行了,在計算時四舍五入就是(int)(a+0.5),就行了
然后還有一個小細節,我注意到了但不知道這個題有沒有故意挖坑,那就是期中考試和期末考試得了0分的人,本來我是直接想判斷一下期中考試的分數是否為0來判斷一個人是否參加過期中考試來著,但因為考慮到了這個細節,就將初值都初始化為了-1,這樣就萬無一失了,還有就是在編程分數那里可以稍微剪一下枝,就是如果編程分數低于200分的同學就不用再進行后續操作了
大概就是這樣,直接上代碼了:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;struct Node {int pro;//編程int mid;//期中int fin;//期末int all;//總評Node()//初始化為-1{pro=mid=fin=all=-1;} };map<string,Node>mp;bool cmp(pair<string,Node> a,pair<string,Node> b) {if(a.second.all!=b.second.all)//總評降序return a.second.all>b.second.all;return a.first<b.first;//學號升序 }int main() { // freopen("input.txt","r",stdin);int a,b,c;scanf("%d%d%d",&a,&b,&c);while(a--){string s;int num;cin>>s>>num;if(num<200)//剪枝continue;mp[s].pro=num;}while(b--){string s;int num;cin>>s>>num;if(mp[s].pro==-1)//剪枝continue;mp[s].mid=num;}while(c--){string s;int num;cin>>s>>num;if(mp[s].pro==-1)//剪枝continue;mp[s].fin=num;}vector<pair<string,Node>>ans;copy(mp.begin(),mp.end(),back_inserter(ans));//把map扔到vector里for(int i=0;i<ans.size();i++)//按照規則計算總評{if(ans[i].second.mid>ans[i].second.fin)ans[i].second.all=(int)(0.4*ans[i].second.mid+0.6*ans[i].second.fin+0.5);elseans[i].second.all=ans[i].second.fin;}sort(ans.begin(),ans.end(),cmp);//按照規則排序for(int i=0;i<ans.size();i++)//輸出{if(ans[i].second.all<60)//若當前學生的總評已經不合格了,及時退出break;printf("%s %d %d %d %d\n",(ans[i].first).c_str(),(ans[i].second).pro,(ans[i].second).mid!=-1?(ans[i].second).mid:-1,(ans[i].second).fin!=-1?(ans[i].second).fin:-1,(ans[i].second).all);}return 0; }?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT (Basic Level) 10
- 下一篇: PAT (Basic Level) 10