题目链接: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. zabbix (6) 为主机添加监控项,触发器,动作

    先了解一下zabbix的相关概念 监控项(iterms):一个具体的指标,比如某个人的体重. 键(key):通过定义(自定义或者zabbix自带)的key获取相应指标的具体值,比如这个人的体重50斤 ...

  2. 小程序web-view的使用,跳转到外部链接~

    先说一下需求,要点击榜单,跳到我们的移动web的项目的榜单页,这个不是小程序的哦,就是网页版的. 榜单的html代码: <view class="nav" hover-cla ...

  3. Go 语言入门(一)基础语法

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(一 ...

  4. git clone 报“The project you were looking for could not be found.”

    因为自己的项目不止一个 又有自动保存git密码的功能,当clone第二个项目的时候就报了如下错误 之前一直是找到钥匙串删除,发现有时候并没有效果.今天在网上搜了一下 发现了一个新的解决办法 在项目前面 ...

  5. H5内嵌原生app

    前言 其实我们不管是从ios还是安卓都可以看出 原生app能内嵌H5的原因是因为有了webview这个app内嵌浏览器视图,从而使得我们可以开发html然后加载到app中(原理几乎跟pc端请求.加载. ...

  6. wordpress插件开发流程梳理-二

    开发插件的最佳实践 避免命名冲突 当您的插件对变量,函数或类使用相同的名称作为另一个插件时,会发生命名冲突. 幸运的是,您可以使用以下方法避免命名冲突. 程序性 默认情况下,所有变量,函数和类都在全局 ...

  7. LC 989. Add to Array-Form of Integer

    For a non-negative integer X, the array-form of X is an array of its digits in left to right order.  ...

  8. ctl +→ = MAC 触控板三指手势

    我只想发一个这个:一直用外接显示器,但是不舍得抛弃全屏程序的切换,即:触控板三指手势. 期间各种百度无果,最多找到出最多的是触发角: 今天终于发现了:ctl +→  =  MAC 触控板三指手势 (外 ...

  9. List三个子类的特点

    List的三个子类的特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安全,效率低. Vector相对A ...

  10. html js 遮罩层

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...