PAT_B_1015_C++(25分)
Java路途在此受阻,有三个测试点无论如何也过不去
只好记录大佬C++代码记录学习
解题思想
本题是典型的排序问题,这里我们使用C++标准模版库(STL)里面的sort()函数。具体过程如下:
定义student结构体类型,成员包括:准考证号、德分、才分以及考生类别。考生类别用于区分5类不同的考生,简化排序过程。在输入过程中根据每位考生的分数来确定考生的类别。输入并分类完毕,接下来就要用到强大的sort()函数了。首先,sort()函数的格式为:
sort(第一个元素的地址,最后一个元素的下一个地址[,比较函数]);
其中,[]内为可选项,它是用来规定排序的规则的,默认是简单的升序排序。如果要实现稍复杂的排序,就需要我们自行构建比较函数内部的规则了(比如此题构建的cmp()函数)。
下面详解一下cmp()函数的构造细节:
- 先按考生类别由低到高排序
- 同一类别考生,按德才总分由高到低排序
- 同类考生,德才总分相同时按德分降序排序
- 同类考生,德分才分均相同时按准考证号的升序排序
构造完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分)相关推荐
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- 【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 ...
- 【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 ...
- 【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-29 修理牧场 (25 分)
7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-18 银行业务队列简单模拟 (25 分)
7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
- 5-35 城市间紧急救援 (25分) pat 数据结构
题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有 ...
最新文章
- ps如何把自己的图与样机结合_激光整平机厂家如何给自己一个定位?
- 组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
- 决策树剪枝的方法与必要性
- C#编程-Access数据库的简单应用
- 除了CRUD也要注意IO
- 收藏 | 深度学习框架简史:TensorFlow和PyTorch双头垄断
- Ubuntu12.04 搭建TFTP服务
- windows环境下部署Tomcat到服务器
- java代码删除本地文件_java程序实现删除本地文件
- springmvc 页面跳转样式访问路径总是多一层地址_Net Core实战之基于角色的访问控制的设计...
- nginx负载两台服务器
- 《机器视觉算法与应用》第3章 机器视觉算法之形态学——学习笔记
- 2元参数matlab图,二元作用参数 - 仿真模拟 - MATLAB - 小木虫论坛-学术科研互动平台...
- Three.js 绘图之不规则路径 3D 墙体生成算法
- 虎符WEB Writeup
- 超简单使用华为云托管服务
- Google Chrome谷歌浏览器导入csv账号密码
- 智能创新引导工具软件——项目总结报告
- java贝叶斯_贝叶斯算法Java实现
- new操作符做了哪些事情?
热门文章
- datatables每页显示数据刷新后不变_2019北京积分落户名单数据的一些分析
- python mp4 切片_FFmpeg MP4视频切片成TS m3u8播放 好文收集
- 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
- 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告
- java对象流定义_Java 对象流的用法,将自定义类数组写入文件中
- Undefined symbols for architecture i386问题解决方法
- http java ssl_使用HttpClient通过HTTPS信任所有证书
- 在Spring Boot中使用@Scheduled实现定时任务
- Intellij IDEA 新建一个EJB工程(三)
- Tomcat打包时多项目共享jar和精确指定jar版本