STL库sort和stable_sort函数

写在前面:

期中考试终于落下了帷幕,我又有时间来做oj题了【捂脸
近期一直在学数据结构,感觉好久没做OJ题了,,
比起写数据结构,我觉得做oj题更需要技巧,然后合理使用库函数很必要。

今天这道题一开始一直WA,以为是sort或stable_sort函数的问题,
最后在论坛大佬指点下终于找到了错误,是字符串比较出现了问题【扶额

不管他能不能看到,在这里,一定要感谢那位老哥,一针见血指出我的问题~

- 出错点:

  1. 库里的sort函数是不稳定的排序。(所以sort两遍行不通)
    两种解决方法:①改写cmp函数,使之可以二级排序;②用两遍stable_sort
  2. 用字符数组存的学号,在比较时直接用 < 来比。
    解决方法:使用库函数 strcmp 来比较学号大小(字典序)。

- 参考博客:

  • sort函数使用心得
  • sort函数对结构体多级排序
  • C++排序之stable_sort()的方法
  • strcmp

题目:

  1. 成绩排序
    单点时限: 2.0 sec
    内存限制: 256 MB
    有 n(1⩽n⩽100)个学生的成绩记录,其中包含学号和成绩两项。

按照成绩从高到低顺序输出成绩及格(⩾60)学生的学号和成绩。成绩相同时按照学号从小到大顺序输出。
输入格式
第 1 行:输入一个整数 n,表示学生记录数。

第 2 行 ~ n+1 行:每行是学号(11 位数字)及成绩(0 到 100 之间的整数)。学号和成绩之间有一个空格。

输出格式
按要求输出结果,每行输出一个空格分隔的学号及成绩。

样例
input
5
10002130201 90
10002130230 80
10002130231 85
10002130148 48
10002130167 90
output
10002130167 90
10002130201 90
10002130231 85
10002130230 80

AC的代码:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;struct Student{char num[12];int grades;
} ;bool cmp(Student stu1, Student stu2){if(stu1.grades>stu2.grades)return true;else if(stu1.grades==stu2.grades){if(strcmp(stu1.num,stu2.num)<0)return true;elsereturn false;}elsereturn false;
}int main(){int n,i;cin>>n;Student stu[n];for(i=0;i<n;i++){cin>>stu[i].num;cin>>stu[i].grades;}sort(stu,stu+n,cmp);for(i=0;i<n;i++){if(stu[i].grades>=60)cout<<stu[i].num<<" "<<stu[i].grades<<endl;}
}

&

看看这“辉煌”的战绩【捂脸

题后感:

其实也没啥感受,就感觉自己挺菜的,然后做题还挺爽的。
emm,还有,找到问题,解决问题的感觉真好~

——2019.4.29 23点34分 于寝室

EOJ 2849 成绩排序 C++相关推荐

  1. python【蓝桥杯vip练习题库】ADV-290成绩排序

    试题 算法提高 成绩排序 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出n个学生的成绩,将这些学生按成绩排序, 排序规则,优先考虑数学成绩,高的在前:数学相同,英语高的在前:数 ...

  2. 成绩排序的c语言算法,成绩排序系统(练习排序算法和复习C语言)

    成绩排序系统(练习排序算法和复习C语言) 实验一 一.实验目的 1.回顾C语言中的输入.输出及结构体等相关知识点: 2.回顾函数的使用: 3.掌握插入排序.交换排序.选择排序中的常用排序的算法思想: ...

  3. PTA学生成绩排序-C语言详解

    7-72 学生成绩排序 (20分) 给出一组学生名单(姓名和成绩),请输出按成绩从大到小排序后的结果(名次和姓名).成绩相同的人拥有相同的名次,且按姓名的字典序从小到大排列.题目保证学生姓名没有重复. ...

  4. java 学生成绩排序

    编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中. 程序运行效果如图: import java.awt.BorderLayout; i ...

  5. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...

    #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...

  6. 1.10 编程基础之简单排序 03 成绩排序 3分 python

    http://noi.openjudge.cn/ch0110/03/ """ 1.10 编程基础之简单排序 03 成绩排序 3分 http://noi.openjudge ...

  7. 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样, 那在成绩排序的基础上按照年龄由小到大排序。 姓名(String

    代码 import java.util.*;/*3.分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序.姓名 ...

  8. 信息学奥赛一本通 1178:成绩排序 | OpenJudge NOI 1.10 03:成绩排序

    [题目链接] ybt 1178:成绩排序 OpenJudge NOI 1.10 03:成绩排序 [题目考点] 1. 结构体 排序 [君义精讲]排序算法 2. 多关键字排序 方法1:将多关键字的排序条件 ...

  9. 信息学奥赛一本通(1178:成绩排序)——选择排序

    1178:成绩排序 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 29458     通过数: 11916 [题目描述] 给出班里某门课程的成绩单,请你按成绩从高 ...

最新文章

  1. MVC 源码系列之路由(一)
  2. C# DataGridView控件用法
  3. SQL中JOIN 的用法
  4. TCP/IP WebSocket MQTT
  5. java socket中的方法_Java中关于Socket的方法与作用详解
  6. oracle分布式数据库中间件,分布式数据库中间件设想
  7. WebService的相关概念
  8. POJ P1185 炮兵阵地 【状压dp】
  9. 东北大学软件项目管理与过程改进复习提纲(2020)——第四章《项目综合管理》
  10. 错落有致——集团企业信息化规划原则
  11. 手把手教你安装Sketch破解版和measure插件 1
  12. Triple Flips CodeForces - 1072E
  13. scrapy follow 笔记
  14. LSD_SLAM 编译、安装到运行demo
  15. 西南民族大学第十届校赛(同步赛) 个人笔记 题解
  16. ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)
  17. 第二次结对编程——电梯调度算法UI贾伟王伟东
  18. 计算机默认网关不可用如何解决问题,Win10网络诊断后提示“默认网关不可用”的问题怎么解决?...
  19. 官宣!1024 程序员节日程发布,第一代程序员求伯君将出席大会
  20. 1+X 云计算平台运维与开发认证(初级)B

热门文章

  1. VS2022+boost库开发支持XP的MFC程序
  2. 计算机中哪个字母代表1024m,电脑中经常用到的1G,1MB,1KB,1pbs等分别是什么意思?它们之间的关系是什么?...
  3. 动态一时爽,重构火葬场?
  4. linux 部署调用SAP接口
  5. taskctl命令行类(sh、exe、python新增scp)插件升级扩展
  6. 机器学习常见的数学符号表
  7. 2013年10月微软MVP当选名单揭晓
  8. Java基础(内部类和匿名内部类的用法)
  9. Linux的NFS共享目录
  10. 孖沙市场二手商品交易系统的设计与实现