现在水平就这样,之前用了两个sort,结果不知道错在这里,其实只要会用sort,这题也就是水题一枚
贴下代码。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct Student
{
char sno[21];
int wk;//解决题目总数
int pb[11];//题号
int grade;
}stu;
bool cmp(const stu& a, const stu& b)
{
if (a.grade != b.grade)
{
return a.grade > b.grade;
} else
{
return strcmp(a.sno,b.sno)<0;
}
}
int main()
{
int N,M,G,score[11],count;
stu s[1005];
while(cin>>N&&N)
{
count = 0;
scanf("%d%d",&M,&G);
for(int i =1;i<=M;i++)
{
scanf("%d",&score[i]);
}
for(int i = 0;i<N;i++)
{
scanf("%s%d",s[i].sno,&s[i].wk);
for(int j =0;j<s[i].wk;j++)
{
scanf("%d",&s[i].pb[j]);
}
}
for(int i= 0;i<N;i++)
{
s[i].grade = 0;
for(int j=1;j<=M;j++)
{
for(int k =0;k<s[i].wk;k++)
{
if(s[i].pb[k] == j)
s[i].grade += score[j];
}
}
}
for(int i = 0;i<N;i++)
{
if(s[i].grade>=G)
count++;
}
printf("%d\n",count);
sort(s,s+N,cmp);
for(int i = 0;i<count;i++)
{
printf("%s %d\n",s[i].sno,s[i].grade);
}
}
return 0;
}