基础题,按要求输入后排序即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
struct student //考生
{
char number[30]; //考号
int score; //分数
}s[MAXN];
//排序标准,分数从大到小,分数相同时,考号从小到大
bool cmp(student s1, student s2)
{
if (s1.score != s2.score)
return s1.score > s2.score;
else
return strcmp(s1.number, s2.number) < 0;
}
int main()
{
int N, M, G; //考生人数,考题数,分数线
int proScore[15]; //题目分数
while (scanf("%d", &N))
{
if (N == 0)
break;
memset(proScore, 0, sizeof(proScore));
scanf("%d%d", &M, &G);
for (int i = 1; i <= M; i++) //输入各题目的分数
{
scanf("%d", &proScore[i]);
}
int m; //考生解题数量
int sumScore; //考生成绩
int temp; //考生解题序号
for (int i = 0; i < N; i++)
{
scanf("%s %d", s[i].number, &m);
sumScore = 0;
for (int i = 0; i < m; i++) //计算考生的成绩
{
scanf("%d", &temp);
sumScore += proScore[temp];
}
s[i].score = sumScore;
}
sort(s, s + N, cmp); //排序
int index; //上线考生的数量
for (index = 0; index < N; index++)
{
if (s[index].score < G)
break;
}
printf("%d\n", index);
for (int i = 0; i < index; i++)
printf("%s %d\n", s[i].number, s[i].score);
}
return 0;
}
继续加油。