版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinlingheshang/article/details/79782734
Section Three
排名
- 认真读题,发现现实按成绩降序,再按学号升序
代码
#include <stdio.h>
#include <string.h>
typedef struct tagData{
char Sno[25];//学号
int a;//解题总数
int B[10];//解决题目的编号
int sum;//学生总分
}Info;
void InsertSort(Info *A,int N)
{
int k,s;
Info t,r;
for(int i=1;i<N;i++)
{
t=A[i];
k=i-1;
while(t.sum>A[k].sum)
{
A[k+1]=A[k];
k--;
if(k==-1) break;
}
A[k+1]=t;
s=k+1;
while(s)
{
if(A[s].sum==A[s-1].sum)
{
if(strcmp(A[s].Sno,A[s-1].Sno)<0)
{
r=A[s-1];
A[s-1]=A[s];
A[s]=r;
}
s--;
}
else break;
}
}
}
int main()
{
int N;//考生人数
int M,G;//M考题数,G分数线
int score[20];//每道题的分数
Info Data[1000],person[1000];
int SN;//超过分数线的学生
while(scanf("%d",&N)!=EOF && N!=0)
{
SN=0;
scanf("%d%d",&M,&G);
for(int i=0;i<M;i++) scanf("%d",&score[i]);
for(int i=0;i<N;i++)
{
Data[i].sum=0;
scanf("\n%s %d",Data[i].Sno,&Data[i].a);
for(int j=0;j<Data[i].a;j++)
{
scanf("%d",&Data[i].B[j]);
Data[i].sum += score[Data[i].B[j]-1];
}
if(G<=Data[i].sum)
{
person[SN]=Data[i];
SN++;
}
}
printf("%d\n",SN);
InsertSort(person,SN);
for(int i=0;i<SN;i++)
printf("%s %d\n",person[i].Sno,person[i].sum);
}
return 0;
}