7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀
一:題目
計算機程序設計能力考試(Programming Ability Test,簡稱PAT)旨在通過統一組織的在線考試及自動評測方法客觀地評判考生的算法設計與程序設計實現能力,科學的評價計算機程序設計人才,為企業選拔人才提供參考標準(網址http://www.patest.cn)。
每次考試會在若干個不同的考點同時舉行,每個考點用局域網,產生本考點的成績。考試結束后,各個考點的成績將即刻匯總成一張總的排名表。
現在就請你寫一個程序自動歸并各個考點的成績并生成總排名表。
輸入格式:
輸入的第一行給出一個正整數N(≤100),代表考點總數。隨后給出N個考點的成績,格式為:首先一行給出正整數K(≤300),代表該考點的考生總數;隨后K行,每行給出1個考生的信息,包括考號(由13位整數字組成)和得分(為[0,100]區間內的整數),中間用空格分隔。
輸出格式:
首先在第一行里輸出考生總數。隨后輸出匯總的排名表,每個考生的信息占一行,順序為:考號、最終排名、考點編號、在該考點的排名。其中考點按輸入給出的順序從1到N編號。考生的輸出須按最終排名的非遞減順序輸出,獲得相同分數的考生應有相同名次,并按考號的遞增順序輸出。
輸入樣例:
2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 4 1234567890013 65 1234567890011 25 1234567890014 100 1234567890012 85輸出樣例:
9 1234567890005 1 1 1 1234567890014 1 2 1 1234567890001 3 1 2 1234567890003 3 1 2 1234567890004 5 1 4 1234567890012 5 2 2 1234567890002 7 1 5 1234567890013 8 2 3 1234567890011 9 2 4二:思路
利用結構體存儲 學號 成績 總排名 考點號 本考點的排名 ;然后在輸入的時候 要記得 將 j 設置成一個變量,這樣就能挨個把所有的值都輸入到結構體數組當中。再然后就是,向結構體里的變量進行賦值。
三:上碼
/**利用結構體數組,重寫送sort方法 */ #include<bits/stdc++.h> using namespace std;struct Node{string id;int grate;int examranking;//考試排名 int examsite;//考點int siteranking;//考點排名 }; //這是定義一個遞減的sort bool sort_Grate(Node a,Node b){if( a.grate == b.grate )return a.id < b.id;return a.grate > b.grate; }int main(){int N;int sum = 0;Node *stu = new Node[30005];cin >> N;for( int i = 0; i < N; i++ ){int K;cin >> K;for( int j = sum; j < sum + K; j++ ){cin >> stu[j].id >> stu[j].grate;stu[j]. examsite = i + 1;//記錄考點}sort(stu+sum,stu+sum+K,sort_Grate);//這是處理每個考點內的排名int count = 1;//記錄排名 for( int j = sum; j < sum + K; j++ ){if( j == sum){//處理第一個為排名第一的 stu[j].siteranking = count; }else{if( stu[j].grate == stu[j - 1].grate)stu[j].siteranking = stu[j - 1].siteranking;elsestu[j].siteranking = count; }count++; } sum += K; }//還剩下總排名未處理 sort(stu,stu+sum,sort_Grate); //每一次sort排序都是將 結構體里的變量都進行了排序(當然我們按照成績進行排序) for( int j = 0; j < sum; j++ ){if( stu[j].grate == stu[j - 1].grate)stu[j].examranking = stu[j - 1].examranking;elsestu[j].examranking = j + 1; } cout << sum << endl;for( int i = 0; i < sum; i++ ){cout << stu[i].id << ' ' << stu[i].examranking << ' ' << stu[i].examsite << ' ' << stu[i].siteranking << endl;}}四:補充
兄弟們 最惡心東西我今天又遇到了,上面那個碼的思路思路是我參考別人的,我自己寫了一個碼,pta上有兩個點過不去,本來今天我早就下班了,可就是因為,有bug,測試了好多數據,都正常,就是tmd過不去,人都裂開了,要么讓我沒思路,,要么讓我不會做,我都能接受,我做出來了,測試了好多數據正確,然后就。。。。害 老樣子,記錄失敗的結果。加油兄各們!我要睡了
/**利用結構體數組,重寫送sort方法 */ #include<bits/stdc++.h> using namespace std;struct Node{string id;int grate; }; //這是定義一個遞減的sort bool sort_Grate(Node a,Node b){if( a.grate == b.grate )return a.id < b.id;return a.grate > b.grate; }int main(){int N,sum = 0;//sum為考生總人數 int count = 1;//記錄考點號 map<string,int>m1,m2,m3; //m1對應總的人數(一個考號對應一個人),m2為一個考號對應一個考點號,m3為一個考號對應其在自己考點的排名 map<string,int>::iterator t;cin >> N;for( int i = 0; i < N; i++ ){int K;cin >> K;sum += K;//統計考生數目Node *node = new Node[K];//用于處理每個考點內的排名 for( int j = 0; j < K; j++ ){string a;int b;cin >> a >> b;m1[a] = b;m2[a] = count;node[j].id = a;node[j].grate = b; } sort(node,node+K,sort_Grate);for( int k = 0; k < K; k++ ){string temp = node[k].id; //記錄考點號 if( node[k-1].grate == node[k].grate ){//處理成績相同的排名 m3[temp] = k - 1 + 1;}else{m3[temp] = k + 1; }}count++; }//創建結構體數組Node *stu = new Node[sum]; int k = 0;for( t = m1.begin(); t != m1.end(); t++ ){stu[k].id = t->first; stu[k].grate = t->second;k++;}//排序 sort(stu,stu+sum,sort_Grate);cout << sum << endl; for( int i = 0; i < sum; i++){cout << stu[i].id << ' ';if( stu[i].grate == stu[i-1].grate ){cout << i - 1 + 1 << ' ';//當分數相同時 需要和前面的人排名相同所以減一,加一是因為i是從0開始排的 }else{cout << i + 1 << ' ';}for( t = m2.begin(); t != m2.end(); t++ ){if( stu[i].id == t->first ){cout << t->second << ' '; break;}} for( t = m3.begin(); t != m3.end(); t++ ){if( stu[i].id == t->first ){cout << t->second << endl; break;}} }} //8 //3 //1234567890001 95 //1234567890005 100 //1234567890003 95 //2 //1234567890002 77 //1234567890004 85 //2 //1234567890013 65 //1234567890011 25 //2 //1234567890014 100 //1234567890012 85 //3 //1234567890016 89 //1234567890017 90 //1234567890018 69 //2 //1234567890020 63 //1234567890021 76 //1 //1234567890023 56 //2 //1234567890024 78 //1234567890026 90 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TikTok广告像素怎么安装像素电脑如何
- 下一篇: 7-42 整型关键字的散列映射 (25