Daniel201418 2019-05-18 10:35 采纳率: 0%
浏览 273
已结题

PAT平台判定显示段错误,求解?

#include
#include
#include
using namespace std;
char letter[4]={'A','C','M','E'};
char sear[100];
struct student{
int grade[4];
// grade[3]=grade[0]+grade[1]+grade[2];
int Arank;
int Crank;
int Mrank;
int Erank;
char num[100];
}stu[20100];
bool cmpA(student a,student b)
{
if(a.grade[3]!=b.grade[3])
return a.grade[3]>b.grade[3];
}
bool cmpC(student a,student b)
{
if(a.grade[0]!=b.grade[0])
return a.grade[0]>b.grade[0];
}
bool cmpM(student a,student b)
{
if(a.grade[1]!=b.grade[1])
return a.grade[1]>b.grade[1];
}
bool cmpE(student a,student b)
{
if(a.grade[2]!=b.grade[2])
return a.grade[2]>b.grade[2];
}
void CMP(student a)
{
if(a.Arank<=a.Crank&&a.Arank<=a.Mrank&&a.Arank<=a.Erank)
printf("%d %c\n",a.Arank,letter[0]);

else if(a.Crank<=a.Arank&&a.Crank<=a.Mrank&&a.Crank<=a.Erank)
printf("%d %c\n",a.Crank,letter[1]);

else if(a.Mrank<=a.Crank&&a.Mrank<=a.Arank&&a.Mrank<=a.Erank)
printf("%d %c\n",a.Mrank,letter[2]);

else if(a.Erank<=a.Crank&&a.Erank<=a.Arank&&a.Erank<=a.Mrank)
printf("%d %c\n",a.Erank,letter[3]);

}
int main(void)
{
int mark=0;

int N,M;
scanf("%d %d",&N,&M);
for(int i=0;i<N;i++)
{
    scanf("%s %d %d %d",stu[i].num,&stu[i].grade[0],&stu[i].grade[1],&stu[i].grade[2]);
    stu[i].grade[3]=(stu[i].grade[0]+stu[i].grade[1]+stu[i].grade[2])/3;
    //stu[i].letter={'A','C','M','E'};
}
sort(stu,stu+N,cmpA);
for(int i=0;i<N;i++)
{
  if(i>0)
    {
        if(stu[i].Arank==stu[i-1].Arank)
        stu[i].Arank=stu[i-1].Arank;
        else
        stu[i].Arank=i+1;
    }
  else
    {
        stu[i].Arank=i+1;
    }
}

sort(stu,stu+N,cmpC);
for(int i=0;i<N;i++)
{
    if(i>0)
    {
        if(stu[i].Crank==stu[i-1].Crank)
        stu[i].Crank=stu[i-1].Crank;
        else
        stu[i].Crank=i+1;
    }
  else
    {
        stu[i].Crank=i+1;
    }
}

sort(stu,stu+N,cmpM);
for(int i=0;i<N;i++)
{
    if(i>0)
    {
        if(stu[i].Mrank==stu[i-1].Mrank)
        stu[i].Mrank=stu[i-1].Mrank;
        else
        stu[i].Mrank=i+1;
    }
  else
    {
        stu[i].Mrank=i+1;
    }
}

sort(stu,stu+N,cmpE);
for(int i=0;i<N;i++)
{
    if(i>0)
    {
        if(stu[i].Erank==stu[i-1].Erank)
        stu[i].Erank=stu[i-1].Erank;
        else
        stu[i].Erank=i+1;
    }
  else
    {
        stu[i].Erank=i+1;
    }
}

for(int i=0;i<M;i++)
{
    mark=0;
    scanf("%s",sear);
    for(int j=0;j<N;j++)
    {
        if(strcmp(sear,stu[j].num)==0)
        {
            mark=1;
            CMP(stu[j]);
        }
    }
    if(mark==0)
    printf("N/A\n");
}

}


  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-05-20 16:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备