每次考試會在若干個不同的考點同時舉行,每個考點用區域網,產生本考點的成績。考試結束後,各個考點的成績將即刻彙總成一張總的排名表。
現在就請你寫乙個程式自動歸併各個考點的成績並生成總排名表。
輸入格式:
輸入的第一行給出乙個正整數n(≤100),代表考點總數。隨後給出n個考點的成績,格式為:首先一行給出正整數k(≤300),代表該考點的考生總數;隨後k行,每行給出1個考生的資訊,包括考號(由13位整數字組成)和得分(為[0,100]區間內的整數),中間用空格分隔。
輸出格式:
首先在第一行裡輸出考生總數。隨後輸出彙總的排名表,每個考生的資訊佔一行,順序為:考號、最終排名、考點編號、在該考點的排名。其中考點按輸入給出的順序從1到n編號。考生的輸出須按最終排名的非遞減順序輸出,獲得相同分數的考生應有相同名次,並按考號的遞增順序輸出。
輸入樣例:25
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
41234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
輸出樣例:
91234567890005 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
這題我的思路是用結構體來存放每位考生的考號num,最終排名rank_total、考點編號place、在該考點的排名rank_in_palce;然後用sort對每次給定考點的考生進行排序,再求出每位考生在該考點的排名;最後對全體考生再用一次sort,然後求出每位考生在全體考生中的排名
#include#includeusing namespace std;
struct pta
b[30001];
bool cmp1(pta x,pta y)
int main()
sort(b+z,b+z+ki,cmp1); /*對每次給定考點的考生按分數從高到低進行排序,
若分數相同按編號從小到大進行排序; */
int m=1;
b[z].rank_in_palce=m;//進行
m++;
for(j=z+1;jelse
} z=total;
} sort(b,b+total,cmp1);
int m=1;
b[0].rank_total=m;
m++;
for(j=1;jelse
} cout
}
PAT排名彙總(25 分)
這個題目就是需要注意一下 注意排序方式,然後就可以直接暴力的方法 進行排名的時候選擇乙個好的方式來 每次考試會在若干個不同的考點同時舉行,每個考點用區域網,產生本考點的成績。考試結束後,各個考點的成績將即刻彙總成一張總的排名表。現在就請你寫乙個程式自動歸併各個考點的成績並生成總排名表。輸入的第一行給...
PAT排名彙總 (25 分)
pat排名彙總 25 分 每次考試會在若干個不同的考點同時舉行,每個考點用區域網,產生本考點的成績。考試結束後,各個考點的成績將即刻彙總成一張總的排名表。現在就請你寫乙個程式自動歸併各個考點的成績並生成總排名表。include include include define fre freopen i...
7 41 PAT排名彙總(25 分)
每次考試會在若干個不同的考點同時舉行,每個考點用區域網,產生本考點的成績。考試結束後,各個考點的成績將即刻彙總成一張總的排名表。現在就請你寫乙個程式自動歸併各個考點的成績並生成總排名表。輸入的第一行給出乙個正整數n 100 代表考點總數。隨後給出n個考點的成績,格式為 首先一行給出正整數k 300 ...