首页 > 代码库 > 题目1014:排名(结构体排序)

题目1014:排名(结构体排序)

问题来源

  http://ac.jobdu.com/problem.php?pid=1014

问题描述

  每次先输入考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;接着是第1题至第M题的正整数分值;之后是每名考生的准考证号(长度不超过20的字符串)、题目总数m、以及这m道题的题号(题目号由1到M)。

问题分析

  直接进行处理,计算出每个学生的总分数,超过分数线就加入到结构体数组中,最后对数组sort一下,输出即可。

  注意自定义的cmp比较函数写法:返回true就是前者排在前。

参考代码

//// Created by AlvinZH on 2017/5/24.// Copyright (c) AlvinZH. All rights reserved.//#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;typedef struct Stu{    char id[25];    int Mark;};Stu S[1005];bool cmp(const Stu &a,const Stu &b){    if(a.Mark!=b.Mark)        return a.Mark>b.Mark;    else        return strcmp(a.id,b.id)<0;}int main(){    int N,M,G;    int Grade[11];    int Count;    while(~scanf("%d",&N)&&N!=0)    {        Count=0;        scanf("%d %d",&M,&G);        for(int i=1;i<=M;i++)            scanf("%d",&Grade[i]);        char Sid[25];        int m;        int Qid;        int SumG;        for(int i=1;i<=N;i++)        {            SumG=0;            scanf("%s %d",&Sid,&m);            for(int j=1;j<=m;j++)            {                scanf("%d",&Qid);                SumG+=Grade[Qid];            }            if(SumG>=G)            {                strcpy(S[Count].id,Sid);                S[Count].Mark=SumG;                Count++;            }        }        sort(S,S+Count,cmp);        printf("%d\n",Count);        for(int i=0;i<Count;i++)            printf("%s %d\n",S[i].id,S[i].Mark);    }}

 

作者: AlvinZH

出处: http://www.cnblogs.com/AlvinZH/

本人Github:https://github.com/Pacsiy/JobDu

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

题目1014:排名(结构体排序)