1012. The Best Rank (25)

来源:互联网 发布:充电宝50000毫安 知乎 编辑:程序博客网 时间:2024/06/01 17:55

题目:https://www.patest.cn/contests/pat-a-practise/1012

注意:注意cmp函数的书写,在学生结构体中添加排名的结构体,再排序

#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#define maxn 2010using namespace std;struct Rank{int n;int rak;};struct student{int id;int score[4];Rank major[4];}Stu[maxn];int n,m;char toc[4]={'A','C','M','E'};bool cmp1(student a,student b){return a.score[0]>b.score[0];}bool cmp2(student a,student b){return a.score[1]>b.score[1];}bool cmp3(student a,student b){return a.score[2]>b.score[2];}bool cmp4(student a,student b){return a.score[3]>b.score[3];}bool cmp5(Rank a, Rank b){if(a.rak != b.rak) return a.rak<b.rak;else  return a.n<b.n;}int main(){//输入n,mscanf("%d%d",&n,&m);//输入成绩for(int i=0; i<n; i++){int c,m,e;scanf("%d%d%d%d",&Stu[i].id,&c,&m,&e);Stu[i].score[0] = c;Stu[i].score[1] = m;Stu[i].score[2] = e;Stu[i].score[3] = (int)((Stu[i].score[0]+Stu[i].score[1]+Stu[i].score[2])/3+0.5);}//全部成绩排名//Csort(Stu, Stu+n,cmp1);Stu[0].major[0].n = 1;Stu[0].major[0].rak = 1;for(int j=1; j<n; j++){//如果分数相等,排名相同Stu[j].major[0].n = 1;if(Stu[j].score[0] == Stu[j-1].score[0]){Stu[j].major[0].rak = Stu[j-1].major[0].rak;}else {Stu[j].major[0].rak = j+1;}}//Msort(Stu, Stu+n,cmp2);Stu[0].major[1].n = 2;Stu[0].major[1].rak = 1;for(int j=1; j<n; j++){//如果分数相等,排名相同Stu[j].major[1].n =2;if(Stu[j].score[1] == Stu[j-1].score[1]){Stu[j].major[1].rak = Stu[j-1].major[1].rak;}else {Stu[j].major[1].rak = j+1;}}//Esort(Stu, Stu+n,cmp3);Stu[0].major[2].n = 3;Stu[0].major[2].rak = 1;for(int j=1; j<n; j++){//如果分数相等,排名相同Stu[j].major[2].n = 3;if(Stu[j].score[2] == Stu[j-1].score[2]){Stu[j].major[2].rak = Stu[j-1].major[2].rak;}else {Stu[j].major[2].rak = j+1;}}//Asort(Stu, Stu+n,cmp4);Stu[0].major[3].n = 0;Stu[0].major[3].rak = 1;for(int j=1; j<n; j++){//如果分数相等,排名相同Stu[j].major[3].n = 0;if(Stu[j].score[3] == Stu[j-1].score[3]){Stu[j].major[3].rak = Stu[j-1].major[3].rak;}else {Stu[j].major[3].rak = j+1;}}//询问for(int i=0; i<m; i++){int flag = 0;int id;scanf("%d",&id);for(int j=0; j<n; j++){if(id == Stu[j].id){flag = 1;sort(Stu[j].major, Stu[j].major+4,cmp5);int x = Stu[j].major[0].n;printf("%d %c\n",Stu[j].major[0].rak,toc[x]);}}if(flag == 0){printf("N/A\n");}}return 0;}


0 0
原创粉丝点击