题目链接:1015 德才论 (25 point(s))
分析

由题意可知,需要将考生按照分数进行一个分类(级),然后在每一级中按照分数排序。输入的时候将每个人的总分等级录取人数先算出来。然后按照自定义的compare函数进行排序。



int compare(const Stu* stu1, const Stu* stu2)函数逻辑如下:

  1. 等级如果不同的话,直接按照等级升序(A:圣人,B:君子,C:愚人,D:小人,E:不录取)排列。
  2. 如果等级相同的话,说明他们在一个类里面,就要按照总分降序排列。
  3. 如果总分相同的话,那德分肯定比较重要,就按照德分降序排列。
  4. 如果德分也相同的话,那才分肯定也相同。那怎么办呢?
  5. 我第一次就是错在这儿,我以为这个时候返回0(相同),其实还有一个条件,那就是按照准考证号升序排列。Emmm…
代码
/*
Score 25
Run Time 105ms
@author wowpH
@version 2.2
*/ #include<stdio.h>
#include<stdlib.h> int L, H; // 录取最低分数线和优先录取线 typedef struct Student {
int id; // 准考证号
short de, cai, all; // 德分,才分,总分
char level; // 等级,A圣人,B君子,C愚人,D小人,E淘汰
}Stu; // 考生
Stu stu[100001]; // 考生 char getLevel(short de, short cai) {
if (de >= H) {
if (cai >= H) {
return 'A'; // 圣人
}
else if (cai >= L) {
return 'B'; // 君子
}
else {
return 'E'; // 淘汰
}
}
else if (de >= L) {
if (cai >= H) {
return 'D'; // 小人
}
else if (cai >= L) {
if (de >= cai) {
return 'C'; // 愚人
}
else {
return 'D'; // 小人
}
}
else {
return 'E'; // 淘汰
}
}
else {
return 'E'; // 淘汰
}
} int compare(const Stu* stu1, const Stu* stu2) {
if (stu1->level != stu2->level) { // 等级不同
return stu1->level - stu2->level; // 按照等级升序排列
}
if (stu1->all != stu2->all) { // 等级相同,总分不同
return stu2->all - stu1->all; // 按照总分降序排列
}
if (stu1->de != stu2->de) { // 等级和总分都相同,德分不同
return stu2->de - stu1->de; // 按照德分降序排列
}
return stu1->id - stu2->id; // 若等级,总分,德分都相同,按照准考证号升序排列
} int main() {
int N, enter; // enter录取的人数
scanf("%d%d%d", &N, &L, &H); // 输入人数,最低录取分数线和优先录取线
enter = N; // 初始全部录取
for (int i = 0; i < N; i++) {
scanf("%d%d%d", &stu[i].id, &stu[i].de, &stu[i].cai); // 考生信息
stu[i].all = stu[i].de + stu[i].cai; // 计算总分
stu[i].level = getLevel(stu[i].de, stu[i].cai); // 分级
if ('E' == stu[i].level) {
enter--; // 若考生被淘汰,录取人数减1
}
}
qsort(stu, N, sizeof(Stu), compare); // 排序,头文件stdlib.h
printf("%d\n", enter);
for (int i = 0; i < enter; i++) {
printf("%d %d %d\n", stu[i].id, stu[i].de, stu[i].cai);
}
}

版权声明:

  1. 转载请于首页注明链接形式的PAT(B)1015 德才论(C)——wowpH
  2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息)。
  3. 如果有疑问欢迎评论留言,尽量解答。

PAT(B)1015 德才论(C)的更多相关文章

  1. PAT乙级 1015. 德才论 (25)

    1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴&g ...

  2. 【PAT】1015 德才论 (25)(25 分)

    1015 德才论 (25)(25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得 ...

  3. pat 乙级 1015. 德才论 (25) c++

     http://39.106.25.239 个人网站 欢迎访问 交流 1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Sta ...

  4. PAT Basic 1015 德才论 (25 分)

    宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...

  5. PAT 1015 德才论 (25)(代码+思路)

    1015 德才论 (25)(25 分)提问 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子, ...

  6. PAT——乙级1015/甲级1062:德才论

    这两个题是一模一样的 1015 德才论 (25 point(s)) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德 ...

  7. PAT乙级:1015 德才论 (25分)

    1015 德才论 (25分) 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人 ...

  8. PAT-乙级-1015. 德才论 (25)

    1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴&g ...

  9. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

随机推荐

  1. (转)hive调优(1) coding调优

    hive 调优(一)coding调优 本人认为hive是很好的工具,目前支持mr,tez,spark执行引擎,有些大公司原来封装的sparksql,开发py脚本,但是目前hive支持spark引擎(不 ...

  2. [ambari环境搭建](未完待续)

    [安装] https://blog.csdn.net/Happy_Sunshine_Boy/article/details/86595945#commentBox https://www.jiansh ...

  3. 走进JavaWeb技术世界11:单元测试框架Junit

    JUnit你不知道的那些事儿 转自 老刘 码农翻身 2016-02-24 话说有一次Eric Gamma 坐飞机的时候偶遇Kent Beck(对,就是极限编程和TDD的发起人) ,  两位大牛见面寒暄 ...

  4. mkfs格式化分区(为分区写入文件系统)

    mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整.如果想要调整,就需要使用 mke2fs 命令重新格式化.命令 ...

  5. ubuntu虚拟机安装及vim配置问题(转载)

    virtual box虚拟机Ubuntu系统安装及共享文件夹建立 https://blog.csdn.net/qq_27905767/article/details/82106753 Linux超全v ...

  6. IO之Socket网络编程

    一.Socket Socket不是Java中独有的概念,而是一个语言无关标准.任何可以实现网络编程的编程语言都有Socket. 1,Socket概念 网络上的两个程序通过一个双向的通信连接实现数据的交 ...

  7. 为什么vue-cli创建的build文件下没有dev-server.js文件

    在新版本的Vue开发中,通过vue-cli创建的build文件夹下面已经没有了旧版本中的dev-server.js文件新版本的vue已将dev-server.js与webpack.dev.conf.j ...

  8. Foxmail找回密码 及 Wireshark 使用【我】

    Foxmail中设置了密码,但是时间长忘了,现在要用,需要弄出来 首先,安装 Wireshark 抓包工具 一路下一步即可, 安装完确保这个图标表示的组件已经安装: 如果没有安装,在Wireshark ...

  9. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_06-SpringSecurityOauth2研究-Oauth2授权码模式-申请令牌

    3.3 Oauth2授权码模式 3.3.1 Oauth2授权模式 Oauth2有以下授权模式: 授权码模式(Authorization Code) 隐式授权模式(Implicit) 密码模式(Reso ...

  10. Qt编写自定义控件50-迷你仪表盘

    一.前言 这个控件取名叫迷你仪表盘,是以为该控件可以缩小到很小很小的区域显示,非常适合小面积区域展示仪表数据使用,还可以手动触摸调节进度,是我个人觉得最漂亮小巧的一个控件.初次看到类似的控件是在一个音 ...