7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀
一:題目
計(jì)算機(jī)程序設(shè)計(jì)能力考試(Programming Ability Test,簡(jiǎn)稱PAT)旨在通過統(tǒng)一組織的在線考試及自動(dòng)評(píng)測(cè)方法客觀地評(píng)判考生的算法設(shè)計(jì)與程序設(shè)計(jì)實(shí)現(xiàn)能力,科學(xué)的評(píng)價(jià)計(jì)算機(jī)程序設(shè)計(jì)人才,為企業(yè)選拔人才提供參考標(biāo)準(zhǔn)(網(wǎng)址http://www.patest.cn)。
每次考試會(huì)在若干個(gè)不同的考點(diǎn)同時(shí)舉行,每個(gè)考點(diǎn)用局域網(wǎng),產(chǎn)生本考點(diǎn)的成績(jī)。考試結(jié)束后,各個(gè)考點(diǎn)的成績(jī)將即刻匯總成一張總的排名表。
現(xiàn)在就請(qǐng)你寫一個(gè)程序自動(dòng)歸并各個(gè)考點(diǎn)的成績(jī)并生成總排名表。
輸入格式:
輸入的第一行給出一個(gè)正整數(shù)N(≤100),代表考點(diǎn)總數(shù)。隨后給出N個(gè)考點(diǎn)的成績(jī),格式為:首先一行給出正整數(shù)K(≤300),代表該考點(diǎn)的考生總數(shù);隨后K行,每行給出1個(gè)考生的信息,包括考號(hào)(由13位整數(shù)字組成)和得分(為[0,100]區(qū)間內(nèi)的整數(shù)),中間用空格分隔。
輸出格式:
首先在第一行里輸出考生總數(shù)。隨后輸出匯總的排名表,每個(gè)考生的信息占一行,順序?yàn)?#xff1a;考號(hào)、最終排名、考點(diǎn)編號(hào)、在該考點(diǎn)的排名。其中考點(diǎn)按輸入給出的順序從1到N編號(hào)。考生的輸出須按最終排名的非遞減順序輸出,獲得相同分?jǐn)?shù)的考生應(yīng)有相同名次,并按考號(hào)的遞增順序輸出。
輸入樣例:
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二:思路
利用結(jié)構(gòu)體存儲(chǔ) 學(xué)號(hào) 成績(jī) 總排名 考點(diǎn)號(hào) 本考點(diǎn)的排名 ;然后在輸入的時(shí)候 要記得 將 j 設(shè)置成一個(gè)變量,這樣就能挨個(gè)把所有的值都輸入到結(jié)構(gòu)體數(shù)組當(dāng)中。再然后就是,向結(jié)構(gòu)體里的變量進(jìn)行賦值。
三:上碼
/**利用結(jié)構(gòu)體數(shù)組,重寫送sort方法 */ #include<bits/stdc++.h> using namespace std;struct Node{string id;int grate;int examranking;//考試排名 int examsite;//考點(diǎn)int siteranking;//考點(diǎn)排名 }; //這是定義一個(gè)遞減的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;//記錄考點(diǎn)}sort(stu+sum,stu+sum+K,sort_Grate);//這是處理每個(gè)考點(diǎn)內(nèi)的排名int count = 1;//記錄排名 for( int j = sum; j < sum + K; j++ ){if( j == sum){//處理第一個(gè)為排名第一的 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排序都是將 結(jié)構(gòu)體里的變量都進(jìn)行了排序(當(dāng)然我們按照成績(jī)進(jìn)行排序) 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;}}四:補(bǔ)充
兄弟們 最惡心東西我今天又遇到了,上面那個(gè)碼的思路思路是我參考別人的,我自己寫了一個(gè)碼,pta上有兩個(gè)點(diǎn)過不去,本來今天我早就下班了,可就是因?yàn)?#xff0c;有bug,測(cè)試了好多數(shù)據(jù),都正常,就是tmd過不去,人都裂開了,要么讓我沒思路,,要么讓我不會(huì)做,我都能接受,我做出來了,測(cè)試了好多數(shù)據(jù)正確,然后就。。。。害 老樣子,記錄失敗的結(jié)果。加油兄各們!我要睡了
/**利用結(jié)構(gòu)體數(shù)組,重寫送sort方法 */ #include<bits/stdc++.h> using namespace std;struct Node{string id;int grate; }; //這是定義一個(gè)遞減的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為考生總?cè)藬?shù) int count = 1;//記錄考點(diǎn)號(hào) map<string,int>m1,m2,m3; //m1對(duì)應(yīng)總的人數(shù)(一個(gè)考號(hào)對(duì)應(yīng)一個(gè)人),m2為一個(gè)考號(hào)對(duì)應(yīng)一個(gè)考點(diǎn)號(hào),m3為一個(gè)考號(hào)對(duì)應(yīng)其在自己考點(diǎn)的排名 map<string,int>::iterator t;cin >> N;for( int i = 0; i < N; i++ ){int K;cin >> K;sum += K;//統(tǒng)計(jì)考生數(shù)目Node *node = new Node[K];//用于處理每個(gè)考點(diǎn)內(nèi)的排名 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; //記錄考點(diǎn)號(hào) if( node[k-1].grate == node[k].grate ){//處理成績(jī)相同的排名 m3[temp] = k - 1 + 1;}else{m3[temp] = k + 1; }}count++; }//創(chuàng)建結(jié)構(gòu)體數(shù)組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 << ' ';//當(dāng)分?jǐn)?shù)相同時(shí) 需要和前面的人排名相同所以減一,加一是因?yàn)閕是從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 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TikTok广告像素怎么安装像素电脑如何
- 下一篇: 只能打字的智能打字机只能打字的智能打字机