题目链接: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…
代码
  1. /*
  2. Score 25
  3. Run Time 105ms
  4. @author wowpH
  5. @version 2.2
  6. */
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. int L, H; // 录取最低分数线和优先录取线
  10. typedef struct Student {
  11. int id; // 准考证号
  12. short de, cai, all; // 德分,才分,总分
  13. char level; // 等级,A圣人,B君子,C愚人,D小人,E淘汰
  14. }Stu; // 考生
  15. Stu stu[100001]; // 考生
  16. char getLevel(short de, short cai) {
  17. if (de >= H) {
  18. if (cai >= H) {
  19. return 'A'; // 圣人
  20. }
  21. else if (cai >= L) {
  22. return 'B'; // 君子
  23. }
  24. else {
  25. return 'E'; // 淘汰
  26. }
  27. }
  28. else if (de >= L) {
  29. if (cai >= H) {
  30. return 'D'; // 小人
  31. }
  32. else if (cai >= L) {
  33. if (de >= cai) {
  34. return 'C'; // 愚人
  35. }
  36. else {
  37. return 'D'; // 小人
  38. }
  39. }
  40. else {
  41. return 'E'; // 淘汰
  42. }
  43. }
  44. else {
  45. return 'E'; // 淘汰
  46. }
  47. }
  48. int compare(const Stu* stu1, const Stu* stu2) {
  49. if (stu1->level != stu2->level) { // 等级不同
  50. return stu1->level - stu2->level; // 按照等级升序排列
  51. }
  52. if (stu1->all != stu2->all) { // 等级相同,总分不同
  53. return stu2->all - stu1->all; // 按照总分降序排列
  54. }
  55. if (stu1->de != stu2->de) { // 等级和总分都相同,德分不同
  56. return stu2->de - stu1->de; // 按照德分降序排列
  57. }
  58. return stu1->id - stu2->id; // 若等级,总分,德分都相同,按照准考证号升序排列
  59. }
  60. int main() {
  61. int N, enter; // enter录取的人数
  62. scanf("%d%d%d", &N, &L, &H); // 输入人数,最低录取分数线和优先录取线
  63. enter = N; // 初始全部录取
  64. for (int i = 0; i < N; i++) {
  65. scanf("%d%d%d", &stu[i].id, &stu[i].de, &stu[i].cai); // 考生信息
  66. stu[i].all = stu[i].de + stu[i].cai; // 计算总分
  67. stu[i].level = getLevel(stu[i].de, stu[i].cai); // 分级
  68. if ('E' == stu[i].level) {
  69. enter--; // 若考生被淘汰,录取人数减1
  70. }
  71. }
  72. qsort(stu, N, sizeof(Stu), compare); // 排序,头文件stdlib.h
  73. printf("%d\n", enter);
  74. for (int i = 0; i < enter; i++) {
  75. printf("%d %d %d\n", stu[i].id, stu[i].de, stu[i].cai);
  76. }
  77. }

版权声明:

  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. 树莓派安装配置Nginx+PHP7+MariaDB

    原文地址:http://blog.sina.com.cn/s/blog_150f554f50102yhra.html 一.安装 Nginx 和 PHP7 1.安装Nginx sudo apt inst ...

  2. 【java反射】

    反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个类对象进行操作. A ...

  3. docker-compose 布署应用nginx中的create-react-app应用获取环境变量

    文章来源:https://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-re ...

  4. 【Python】分析自己的博客 https://www.cnblogs.com/xiandedanteng/p/?page=XX,看每个月发帖量是多少

    要执行下面程序,需要安装Beautiful Soup和requests,具体安装方法请见:https://www.cnblogs.com/xiandedanteng/p/8668492.html # ...

  5. sqlserver 动态sql执行execute和sp_executesql

    sp_executesql的运用 书写语法要点: exec sp_executesql @sql,N’参数1 类型1,参数2 类型2,参数3 类型3 OUTPUT’,参数1,参数2,参数3 OUTPU ...

  6. OneDrive

    OneDrive https://onedrive.live.com

  7. Webservice初体验:axis调用wsdl和document解析

    Neo君遇到了需要调用webservice接口的情况,然而作为一只小白对这方面了解困乏,经过摸索,完成了一个小的Demo,记录下. 一:背景 同事给了我一个webservice地址,打开后后缀是&qu ...

  8. linux下nginx结合keepalived实现主从切换的配置

    linux下nginx结合keepalived实现主从切换的配置   解决方法: 实现一个主nginx宕机,请求转到另一个nginx中. 1.确保两台nginx已启动,假如端口分别是192.168.0 ...

  9. python 对xls写入信息

    只能新创建xls # coding=utf-8import xlwt writebook = xlwt.Workbook()                #打开excel test= writebo ...

  10. IDEA的查询引用、调用关系图的功能(转)

    转自: http://www.cnblogs.com/ghj1976/p/5382455.html Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员 ...