PAT -- A1012 The Best Rank(2019/2/15/2)
阿新 • • 發佈:2019-02-15
pac out == oca urn 其他 tput pan can
先輸入所有input case,在執行;出現很多類似的題
在就覺此類問題時,可以采用
The Best Rank (25 分)
input case:
5 6
310101 98 85 88
310102 70 95 88
310103 82 87 94
310104 91 91 91
310105 85 90 90
310101
310102
310103
310104
310105
999999
PAT output case:
1 C
1 M
1 E
1 A
3 A
N/A
Local input/output case:
310101 1
1 C
310102 2
1 M
310103 3
1 E
310104 4
1 A
310105 5
3 A
999999 6
N/A
此例子在Local輸入1條數據相應的輸出一條,而PAT
先輸入所有input case,在執行;出現很多類似的題
在就覺此類問題時,可以采用
for(int i = 0; i < n; i++){ scanf("%d", &a[i]; .................. ...處理過程 ... .................. printf("%d", a[i]; }
代碼如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 usingnamespace std; 5 struct Stu_info{ 6 int id; //存放 id 的六位整數 7 int score[4]; //存放 C M E A 的(分數)數組 8 }stu[2010]; 9 char course[4] = {‘A‘, ‘C‘, ‘M‘, ‘E‘}; //將平均分A存在course[0]中,便於枚舉 10 int Rank[10000000][4] = {0}, now; 11 bool cmp(Stu_info a, Stu_info b){ 12 /* 升序排列,如果改為 return a>b; 則為降序*/ 13 return a.score[now] > b.score[now]; 14 } 15 int main(){ 16 int m, n; 17 scanf("%d%d", &m, &n); 18 for(int i = 0; i < m; i++){ 19 /* 依次讀入 id C M E, 且計算品均分 A */ 20 scanf("%d%d%d%d", &stu[i].id, &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]); 21 stu[i].score[0] = (stu[i].score[1] + stu[i].score[2] + stu[i].score[3]) / 3; 22 } 23 for(now = 0; now < 4; now++){ 24 /* now = 0; 時,對 平均分 A 從大到小排序 25 now = 1; 時,對 C C 從大到小排序 26 now = 2; 時,對 數學 M 從大到小排序 27 now = 3; 時,對 英語 E 從大到小排序 */ 28 sort(stu, stu + m, cmp); 29 /* 排完序號,將分數最高的設置為 1 */ 30 Rank[stu[0].id][now] = 1; 31 for(int i = 1; i < m; i++){ 32 if(stu[i].score[now] == stu[i-1].score[now]){ 33 /* 若與前一位考生分數相同,則他們的排名相同 */ 34 Rank[stu[i].id][now] = Rank[stu[i-1].id][now]; 35 }else{ 36 /* 否則,為其設置正確的排名 */ 37 Rank[stu[i].id][now] = i + 1; 38 } 39 } 40 } 41 int query; //查詢的考生 id 42 for(int i = 0; i < n; i++){ 43 scanf("%d", &query); 44 if(Rank[query][0] == 0){/* 如果查詢不到,則 N/A */ 45 printf("N/A\n"); 46 }else{ /* 否則,輸出他們的信息 */ 47 int k = 0; 48 for(int j = 0; j < 4; j++){ 49 if(Rank[query][j] < Rank[query][k]){ 50 /* j = 0; 查詢 Rank[query][0] 的值,最小的即為排名; 51 以此類推,得到其他同學的各科排名 52 */ 53 k = j; 54 } 55 } 56 printf("%d %c\n", Rank[query][k], course[k]); 57 } 58 } 59 return 0; 60 }
PAT -- A1012 The Best Rank(2019/2/15/2)