Java路途在此受阻,有三个测试点无论如何也过不去
只好记录大佬C++代码记录学习

解题思想

本题是典型的排序问题,这里我们使用C++标准模版库(STL)里面的sort()函数。具体过程如下:

定义student结构体类型,成员包括:准考证号、德分、才分以及考生类别。考生类别用于区分5类不同的考生,简化排序过程。在输入过程中根据每位考生的分数来确定考生的类别。输入并分类完毕,接下来就要用到强大的sort()函数了。首先,sort()函数的格式为:

sort(第一个元素的地址,最后一个元素的下一个地址[,比较函数]);

其中,[]内为可选项,它是用来规定排序的规则的,默认是简单的升序排序。如果要实现稍复杂的排序,就需要我们自行构建比较函数内部的规则了(比如此题构建的cmp()函数)。

下面详解一下cmp()函数的构造细节:

  1. 先按考生类别由低到高排序
  2. 同一类别考生,按德才总分由高到低排序
  3. 同类考生,德才总分相同时按德分降序排序
  4. 同类考生,德分才分均相同时按准考证号的升序排序

构造完cmp()后,一句代码即可完成本题排序,简单粗暴有效!

sort(stu,stu + n,cmp);//注意sort()函数的第二个参数为最后一个元素的下一个位置

知识拓展

毫无疑问,在上机考试中最适合使用的语言就是C语言和C++了,虽然java和python用的人更多,但是它们的执行效率相对于C/C++而言要慢很多,经常会造成超时。因此,我所做的示例代码一般都是C/C++来写的,前面的几道题为了让大家适应,我选择了用全C语言的方式,但是C语言虽然有很多优点,但是它是有一些不太顺手的规则的,C++是向下兼容C的,而且C++中有一些比较好用的特性可以使我们的编程更便捷,因此,接下来题目的示例代码中,我将逐步加入C++的一些元素。请注意,以后的代码在编辑器中一定要保存为.cpp文件,这是C++文件的扩展名,这是为了利用C++的一些好的特性。
C++标准中头文件书写格式一般为cstdio,它等价于C语言的stdio.h的写法。推荐以后用C++的书写形式,即

#include <cstdio>

你可能会觉得C语言的标准格式输入输出函数scanf和printf太麻烦,因为它还要指定输入输出格式,而C++的cin和cout相比而言就显得非常简单。但是,我还是建议大家用scanf和printf来进行输入输出,因为,cin和cout要比scanf和printf消耗更多的时间,很容易在输入输出中产生超时。

C++的main()函数位置上面一般会有一句

using namespace std;

所谓namespace,即为名字空间,标准C++中引入名字空间的概念,把标准库里面的一些东西封装到std名字空间中。使用using编译命令导入所有的名称。使用C++的一些标准模版库时,一般需要添加此句。初学者,每一个C++程序最好都这样做。

#include <cstdio>
#include <algorithm>
#define MAXN 100001
using namespace std;
struct student
{int id;//准考证号int mor_score;//德分int abi_score;//才分int category;//类别
}stu[MAXN];
//排序规则函数cmp
bool cmp(student a, student b)
{if(a.category != b.category){//先按考生类别由低到高排序return a.category < b.category;}//同一类别考生,按德才总分由高到低排序else if((a.mor_score + a.abi_score) != (b.mor_score + b.abi_score)){return (a.mor_score + a.abi_score) > (b.mor_score + b.abi_score);}//同类考生,德才总分相同时按德分降序排序else if(a.mor_score != b.mor_score){return a.mor_score > b.mor_score;}//同类考生,德分才分均相同时按准考证号的升序输出else{return a.id < b.id;}
}
int main()
{int n,l,h,i,cou = 0;//cou统计未达标考生人数scanf("%d%d%d",&n,&l,&h);for(i = 0; i < n; i++){scanf("%d%d%d",&stu[i].id,&stu[i].mor_score,&stu[i].abi_score);if(stu[i].mor_score >= h&&stu[i].abi_score >= h){stu[i].category = 1;//第一类考生,即“德才全尽”}else if(stu[i].mor_score >= h&&stu[i].abi_score >= l){stu[i].category = 2;//第二类考生,即“德胜才”}else if(stu[i].mor_score >= l&&stu[i].abi_score >= l&&stu[i].mor_score >= stu[i].abi_score){stu[i].category = 3;//第三类考生,即“才德兼亡”但尚有“德胜才”}else if(stu[i].mor_score >= l&&stu[i].abi_score >= l){stu[i].category = 4;//第四类考生,即其他达到最低线 L 的考生}else{stu[i].category = 5;//第五类考生,未达最低线,不参与排名cou++;}}sort(stu,stu + n,cmp);//注意sort()函数的第二个参数为最后一个元素的下一个位置printf("%d\n",n-cou);//输出达标考生人数for(i = 0; i < n-cou; i++){printf("%d %d %d\n",stu[i].id,stu[i].mor_score,stu[i].abi_score);}return 0;
}

PAT_B_1015_C++(25分)相关推荐

  1. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  2. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  3. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  4. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  5. 【PAT (Advanced Level) Practice】1093 Count PAT‘s (25 分)

    1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...

  6. 【PAT (Advanced Level) Practice】1149 Dangerous Goods Packaging (25 分)

    1149 Dangerous Goods Packaging (25 分) When shipping goods with containers, we have to be careful not ...

  7. 7-29 修理牧场 (25 分)

    7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L ​i ​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  8. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  9. 5-35 城市间紧急救援 (25分) pat 数据结构

    题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有 ...

最新文章

  1. ps如何把自己的图与样机结合_激光整平机厂家如何给自己一个定位?
  2. 组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
  3. 决策树剪枝的方法与必要性
  4. C#编程-Access数据库的简单应用
  5. 除了CRUD也要注意IO
  6. 收藏 | 深度学习框架简史:TensorFlow和PyTorch双头垄断
  7. Ubuntu12.04 搭建TFTP服务
  8. windows环境下部署Tomcat到服务器
  9. java代码删除本地文件_java程序实现删除本地文件
  10. springmvc 页面跳转样式访问路径总是多一层地址_Net Core实战之基于角色的访问控制的设计...
  11. nginx负载两台服务器
  12. 《机器视觉算法与应用》第3章 机器视觉算法之形态学——学习笔记
  13. 2元参数matlab图,二元作用参数 - 仿真模拟 - MATLAB - 小木虫论坛-学术科研互动平台...
  14. Three.js 绘图之不规则路径 3D 墙体生成算法
  15. 虎符WEB Writeup
  16. 超简单使用华为云托管服务
  17. Google Chrome谷歌浏览器导入csv账号密码
  18. 智能创新引导工具软件——项目总结报告
  19. java贝叶斯_贝叶斯算法Java实现
  20. new操作符做了哪些事情?

热门文章

  1. datatables每页显示数据刷新后不变_2019北京积分落户名单数据的一些分析
  2. python mp4 切片_FFmpeg MP4视频切片成TS m3u8播放 好文收集
  3. 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
  4. 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告
  5. java对象流定义_Java 对象流的用法,将自定义类数组写入文件中
  6. Undefined symbols for architecture i386问题解决方法
  7. http java ssl_使用HttpClient通过HTTPS信任所有证书
  8. 在Spring Boot中使用@Scheduled实现定时任务
  9. Intellij IDEA 新建一个EJB工程(三)
  10. Tomcat打包时多项目共享jar和精确指定jar版本