PAT 甲级 1012. The Best Rank (25)

来源:互联网 发布:冰箱 知乎 编辑:程序博客网 时间:2024/05/21 10:45

题目:点击打开链接

思路:1.数据输入后,编写自定义排序函数进行比较

            2.排序后记录相应的等级

            3.对于输入的编号,查找是否有成绩,若有输出最高等级,若无,按题意输出。

注意:

            1.注意成绩并列的情况

            2.注意排序函数的编写,如需要变量,可将其定义为全局函数,这样编写比较简便。

代码:

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;struct stu{string ID;int grade[4];int r[4];};char C[4]={'A','C','M','E'};//自定义比较函数int item;bool rank0(const stu &a,const stu &b){return a.grade[item]>b.grade[item];  //分数由高到低排列}//根据比较结果写入等级void write(vector<stu> &A,int num,int k){int i=1;A[0].r[k]=1;for(;i<num;++i){if(A[i].grade[k]<A[i-1].grade[k])  //注意排名并列的情况    A[i].r[k]=i+1;elseA[i].r[k]=A[i-1].r[k];}}int main(){int N,M;cin>>N>>M;//输入vector<stu> S(N);int i;for(i=0;i<N;i++){cin>>S[i].ID;cin>>S[i].grade[1]>>S[i].grade[2]>>S[i].grade[3];S[i].grade[0]=(S[i].grade[1]+S[i].grade[2]+S[i].grade[3])/3;//平均分A//根据优先度A>C>M>E来输入}//输入IDvector<string> id(M);for(i=0;i<M;++i){cin>>id[i];}//排序for(i=0;i<4;++i){item=i;                sort(S.begin(),S.end(),rank0);        write(S,N,item);            //写等级}//查找vector<stu>::iterator iter;int min,q;for(i=0;i<M;++i){//查找是否有相应成绩iter=S.begin();while(iter!=S.end()){if((*iter).ID==id[i])break;++iter;}if(iter!=S.end()){min=(*iter).r[0]; q=0;//当前最小等级for(int p=1;p<4;++p)   //对于每一个方面,ACME{if((*iter).r[p]<min){min=(*iter).r[p];q=p;               //当前项目编号}}cout<<min<<" "<<C[q]<<endl;}else{cout<<"N/A"<<endl;}}system("pause");return 0;}