大概题意:
给一波学生成绩(三个科目CME),计算平均分A,各科成绩以及平均分A分别进行排名,最后输入一些学号,查询四组中最高名次,以及名次对应的科目
直接贴代码
代码
#include <cstdio>
#include <algorithm>
using namespace std;
struct Student{
int id;
double grade[4]; //grade[0]=a,grade[1]=c,grade[2]=m,grade[3]=e
}stu[2010];
int km;
char Course[4]={'A','C','M','E'};
int Rank[1000000][4]={0};
bool cmp(Student a,Student b){
return a.grade[km]>b.grade[km];
}
int main(){
int n,m,number;
scanf("%d",&n);
scanf("%d",&m);
for(int i=0;i<n;i++){
scanf("%d%f%f%f",&stu[i].id,&stu[i].grade[1],&stu[i].grade[2],&stu[i].grade[3]);
stu[i].grade[0]=(stu[i].grade[1]+stu[i].grade[2]+stu[i].grade[3])/3.0;
}
for(km=0;km<4;km++){
sort(stu,stu+n,cmp);
Rank[stu[0].id][km]=1;
for(int j=1;j<n;j++){
if(stu[j].grade[km]==stu[j-1].grade[km]){
Rank[stu[j].id][km]=Rank[stu[j-1].id][km];
}else {
Rank[stu[j].id][km]=j+1;
}
}
}
for(int i=0;i<m;i++){
number=0;
int f=0;
scanf("%d",&number);
if(Rank[number][0]==0){
printf("N/A\n");
}else{
for(int j=1;j<4;j++){
if(Rank[number][j]<Rank[number][f]){
f=j;
}
}
printf("%d %c\n",Rank[number][f],Course[f]);
}
}
return 0;
}
注意
①测试点0,第12行代码我之前写的是Rank[999999][4],后面操作中数组越界了,所以过不了
②10~12行代码,不可以放main函数里面,放里面的话,我的IDE运行的时候没有输入界面