基础实验7-2.3 德才论 (25分)

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

输入格式:
输入第一行给出 3 个正整数,分别为:N(≤10​5​​),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。
随后 N 行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。

输出格式:
输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

输入样例:

14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60

输出样例:

12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90

想法主要参考这篇博客:10-排序5 PAT Judge (25分)

C语言实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct people
{int defen;//德分int caifen;//才分int total;//德分+才分char * num;//准考证号
};
typedef struct people * People;
void Swap(People A, People B)
{struct people t;t = *A;*A = *B;*B = t;
}int Cmp(const void *a, const void *b)
{int k;if (((struct people*)a)->total < ((struct people*)b)->total) //按总分递减排序      k = 1; //返回大于0,a,b位置需交换  else if (((struct people*)a)->total > ((struct people*)b)->total)k = -1; //返回小于0, a,b位置不变   else {if (((struct people*)a)->defen < ((struct people*)b)->defen) //按德分递减排序           k = 1;else if (((struct people*)a)->defen > ((struct people*)b)->defen)k = -1;else {if (strcmp(((struct people*)a)->num, ((struct people*)b)->num) < 0) //按准考证号递增排序;                k = -1;elsek = 1;}}return k;
}void print(People P, int n);//打印输出int main()
{int N, L, H;//考生总数N,录取最低分数线L,优先录取线Hscanf("%d %d %d\n", &N, &L, &H);int i, j;People P1, P2, P3, P4;//P1记录第一类考生,P2记录第二类考生,P3记录第三类考生,P4记录第四类考生P1 = (People)malloc(N * sizeof(struct people));P2 = (People)malloc(N * sizeof(struct people));P3 = (People)malloc(N * sizeof(struct people));P4 = (People)malloc(N * sizeof(struct people));for (i = 0; i < N; i++){P1[i].num = (char *)malloc(9 * sizeof(char));P2[i].num = (char *)malloc(9 * sizeof(char));P3[i].num = (char *)malloc(9 * sizeof(char));P4[i].num = (char *)malloc(9 * sizeof(char));}int n = 0;//n是达到最低分数线的考生人数int i1 = 0, i2 = 0, i3 = 0, i4 = 0;int n1, n2, n3, n4;//四类考生分别的总人数int g1, g2;for (i = 0; i < N; i++){struct people p;p.num = (char *)malloc(9 * sizeof(char));scanf("%s %d %d", p.num, &g1, &g2);p.caifen = g2;p.defen = g1;p.total = g1 + g2;if (g1 >= L && g2 >= L){n++;if (g1 >= H && g2 >= H){P1[i1] = p;i1++;}else if (g1 >= H && g2 < H){P2[i2] = p;i2++;}else if (g1 < H&&g2 < H&&g1 >= g2){P3[i3] = p;i3++;}else{P4[i4] = p;i4++;}}}n1 = i1; n2 = i2; n3 = i3; n4 = i4;printf("%d\n", n);//排序后依次输出第一、二、三、四类人qsort(P1, n1, sizeof(struct people), Cmp);print(P1, n1);qsort(P2, n2, sizeof(struct people), Cmp);print(P2, n2);qsort(P3, n3, sizeof(struct people), Cmp);print(P3, n3);qsort(P4, n4, sizeof(struct people), Cmp);print(P4, n4);return 0;
}
void print(People P, int n)
{int i;for (i = 0; i < n; i++){printf("%s %d %d\n", P[i].num, P[i].defen, P[i].caifen);}
}

数据结构PTA习题:基础实验7-2.3 德才论 (25分)——排序相关推荐

  1. 【两种解法】基础实验4-2.2 列出叶结点 (25 分)

    立志用最少的代码做最高效的表达 对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 N− ...

  2. 【视频讲解】基础实验4-2.1 树的同构 (25 分)

    立志用最少的代码做最高效的表达 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树 ...

  3. 基础实验 7-2.1 魔法优惠券(25 分)

    在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值 K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的 ...

  4. 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)

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

  5. 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)

    进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...

  6. mooc浙大数据结构PTA习题之一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  7. 数据结构PTA习题:11-散列4 Hashing - Hard Version逆散列问题 (30分)——散列+拓扑排序

    11-散列4 Hashing - Hard Version 逆散列问题 (30分) Given a hash table of size N, we can define a hash functio ...

  8. PTA甲级 1043 Is It a Binary Search Tree (25分) 树的遍历

    强烈推荐,刷PTA的朋友都认识一下柳神–PTA解法大佬 本文由参考于柳神博客写成 柳神的CSDN博客,这个可以搜索文章 柳神的个人博客,这个没有广告,但是不能搜索 还有就是非常非常有用的 算法笔记 全 ...

  9. C++学习之路 | PTA乙级—— 1015 德才论 (25分)(精简)

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

最新文章

  1. Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug
  2. java 程序编译和运行的过程
  3. 外卖市场的搅屎棍要来了?字节跳动内测“心动外卖”!
  4. matplotlib错误:from matplotlib import afm, cbook, ft2font, rcParams, get_cachedirImportError: DLL load
  5. Adaboost算法原理分析和实例+代码(简明易懂)
  6. java并行流 阻塞主线程_多线程入门案例与java8的并行流
  7. 使用matplotlib画图时不能同时打开太多张图
  8. 【图像处理】MATLAB:图像压缩
  9. 【原创】3大主流的移动应用方式APP开发姿势解读
  10. tensorflow之交叉熵
  11. Linux安装网易云音乐
  12. 易居IPO后首份成绩单透露了什么秘密?|一点财经
  13. java安装教程(eclipse)
  14. Java的发展 Java在不同系统下的开发环境 Java语言特性 Java实现跨平台
  15. AMD Fluid Motion Video补帧教程
  16. 【CodeForces】896 B. Ithea Plays With Chtholly
  17. python知识点智能问答_【每日一荐】智能问答API
  18. Facebook MySQL工程师吐槽MemSQL:MySQL比你们快无数倍
  19. Javascript基础*
  20. 中鸣循迹机器人_自动循迹机器人控制系统的设计

热门文章

  1. NOIP2013普及组 题解
  2. actin/phobos后缀勒索病毒处理 百分百解密[cleverhorse@protonmail.
  3. C++学习路线必读4本书
  4. win10 运行 bat 文件闪过解决办法
  5. 全局地址池和接口地址池
  6. 盘一盘 Python 系列 - Cufflinks (下)
  7. JMeter 常用的几种断言方法,你会几种呢?
  8. 主板aspm关闭_华硕主板BIOS关闭secure boot和fastboot图解
  9. java 线性回归_Java实现一元线性回归
  10. cs,ds,ss,es?即cs,ds,ss,es的区别