PAT程序设计考题——甲级1012( The best rank ) C++实现

自认为完美 但有两分没有调试成功 点击打开链接
#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010


struct subject{//这一题充分利用了库函数  写复杂了 按照各科成绩分类更合理
 string coarse;
 double grade;
};
struct stu{
 string id;
 subject c;
 subject m;
 subject e;
 subject a;
};
int type;//鉴别排序 的类型
vector<stu> qw1;
vector<stu> qw2;
vector<stu> qw3;
vector<stu> qw4;
bool cmp(stu a,stu b)
{   if(type==4) { 
return a.a.grade>b.a.grade;}
 if(type==1) return a.c.grade>b.c.grade;
 if(type==2) return a.m.grade>b.m.grade;
 if(type==3) return a.e.grade>b.e.grade;
}
int rank2;
subject fun(string id)//返回一个学生最高的一门学科 这是挺关键的一步   注意相同的排名要空出来
{
 int ar,cr,mr,er;
 for(rank2=0;rank2<qw1.size();rank2++)
 { ar=cr=mr=er=0;
 if(qw1[rank2].id==id) return qw1[rank2].a;
 if(qw2[rank2].id==id) return qw2[rank2].c;
 if(qw3[rank2].id==id) return qw3[rank2].m;
 if(qw4[rank2].id==id) return qw4[rank2].e;
 }
}
int main()
{ stu tem;
tem.a.coarse="A";
tem.e.coarse="E";
tem.m.coarse="M";
tem.c.coarse="C";
string temp;
double cgra,mgra,egra;
int pep,cpep;
cin>>pep>>cpep;
for(int i=0;i<pep;i++)
{
 cin>>tem.id>>tem.c.grade>>tem.m.grade>>tem.e.grade;
   tem.a.grade=tem.c.grade+tem.m.grade+tem.e.grade;
 qw1.push_back(tem);
 qw2.push_back(tem);
  qw3.push_back(tem);
   qw4.push_back(tem); 
}
type=4;
sort(qw1.begin(),qw1.end(),cmp);
type=1;
sort(qw2.begin(),qw2.end(),cmp);
type=2;
sort(qw3.begin(),qw3.end(),cmp);
type=3;
sort(qw4.begin(),qw4.end(),cmp);
for(int i=0;i<cpep;i++)
{
 cin>>temp;
 subject store2;
 int j;
 bool flag=false;
 for(j=0;j<qw1.size();j++)
{ if(qw1[j].id==temp) {
flag=true;
break;}
 }
 int z;int k;
 if(!flag) cout<<"N/A"<<endl;
  else{
  store2=fun(temp);
  if(store2.coarse=="A")
  {
  for(k=0,z=0;k<qw1.size();k++,z++) {
  if(k!=0&&qw1[k].a.grade==qw1[k-1].a.grade)  z--;
  else z=k;  if(qw1[k].id==temp) break;
  }
  }
    if(store2.coarse=="C")
  {
  for(k=0,z=0;k<qw1.size();k++,z++) {
 
  if(k!=0&&qw2[k].c.grade==qw2[k-1].c.grade)  z--;
  else z=k;if(qw2[k].id==temp) break;}
  }
  
    if(store2.coarse=="M")
  {
  for(k=0,z=0;k<qw1.size();k++,z++) {
 
  if(k!=0&&qw3[k].m.grade==qw3[k-1].m.grade)  z--;
  else z=k; if(qw3[k].id==temp) break;}
  }
    if(store2.coarse=="E")
  {
  for(k=0,z=0;k<qw1.size();k++,z++) {
  if(k!=0&&qw4[k].e.grade==qw4[k-1].e.grade)  z--;
  else z=k;  if(qw4[k].id==temp) break;
}
  }
cout<<z+1<<" "<<store2.coarse<<endl;}
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值