首页 > 代码库 > 题目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:排名(结构体排序)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。