日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:分別給出a個學生的編程分數,b個學生的期中考試成績,c個學生的期末考試成績,有幾個規則:

  • 總評為:
  • 若期中考試成績大于期末考試成績:
  • 否則:
  • 合格的定義是編程分數大于等于200并且總評四舍五入后大于等于60
  • 排序的優先級是:
  • 先按總評排序
  • 再按學號排序
  • 滿足以上規則的情況下,從大到小輸出合格的學生信息

    題目分析:思路簡單的一道模擬題,就因為這個題目將學號變為了字符串就上升了一個難度,如果是四位或五位的數字的話我們可以直接開結構體然后儲存信息,但既然學號變為了字符串,我們就不得不用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)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。