题目

  1. . 德才论 ()
  2.  
  3. 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
  4.  
  5. 现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
  6.  
  7. 输入格式:
  8.  
  9. 输入第1行给出3个正整数,分别为:N(<=),即考生总数;L(>=),为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取;H(<),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线L的考生也按总分排序,但排在第三类考生之后。
  10.  
  11. 随后N行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才分为区间[, ]内的整数。数字间以空格分隔。
  12.  
  13. 输出格式:
  14.  
  15. 输出第1行首先给出达到最低分数线的考生人数M,随后M行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
  16. 输入样例:
  17.  
  18. 输出样例:

  这里使用了多字段排序,调用系统自带的快速排序最为合适,需要实现自己的cmp函数。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4.  
  5. typedef struct
  6. {
  7. int num;
  8. int d;
  9. int c;
  10. }student;
  11.  
  12. int comp(const void *a, const void *b)
  13. {
       //按照总分第减排序 
  14. if((*(student*)a).d+(*(student*)a).c != (*(student*)b).d+(*(student*)b).c)
  15. return ((*(student*)b).d+(*(student*)b).c)-((*(student*)a).d+(*(student*)a).c);
       //按照道德分第减排序
  16. else if((*(student*)a).d != (*(student*)b).d)
  17. return (*(student*)b).d-(*(student*)a).d;
       //按照学好递增排序
  18. else return (*(student*)a).num-(*(student*)b).num;
  19. }
  20.  
  21. int main()
  22. {
  23. int n,l,h,i,count=;
  24. int num,d,c;
  25. int n1=,n2=,n3=,n4=;
  26. student *p1;
  27. student *p2;
  28. student *p3;
  29. student *p4;
  30. student temp;
  31. scanf("%d %d %d",&n,&l,&h);
  32. p1 = (student *)malloc(*sizeof(student));
  33. p2 = (student *)malloc(*sizeof(student));
  34. p3 = (student *)malloc(*sizeof(student));
  35. p4 = (student *)malloc(*sizeof(student));
  36.  
  37. for(i=;i<n;i++)
  38. {
  39. scanf("%d %d %d",&temp.num,&temp.d,&temp.c);
  40. if((temp.d>=l)&&(temp.c>=l))
  41. {
  42. if((temp.d>=h)&&(temp.c>=h))
  43. p1[n1++] = temp;
  44. else if(temp.d>=h)
  45. p2[n2++] = temp;
  46. else if(temp.d>=temp.c)
  47. p3[n3++] = temp;
  48. else p4[n4++] = temp;
  49. }
  50. }
  51.  
  52. qsort(p1,n1,sizeof(student),comp);
  53. qsort(p2,n2,sizeof(student),comp);
  54. qsort(p3,n3,sizeof(student),comp);
  55. qsort(p4,n4,sizeof(student),comp);
  56. printf("%d\n",n1+n2+n3+n4);
  57. for(i=;i<n1;i++)
  58. printf("%d %d %d\n",p1[i].num,p1[i].d,p1[i].c);
  59. for(i=;i<n2;i++)
  60. printf("%d %d %d\n",p2[i].num,p2[i].d,p2[i].c);
  61. for(i=;i<n3;i++)
  62. printf("%d %d %d\n",p3[i].num,p3[i].d,p3[i].c);
  63. for(i=;i<n4;i++)
  64. printf("%d %d %d\n",p4[i].num,p4[i].d,p4[i].c);
  65. return ;
  66. }

C语言中使用系统自带的快排函数的更多相关文章

  1. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:

  2. qsort 快排函数(C语言)

    qsort 快排函数(C语言) 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, ...

  3. C语言中的系统时间结构体类型

    在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...

  4. go语言中常用的文件和文件夹操作函数

    package main; import ( "os" "log" "time" "fmt" ) //一些常用的文件操作 ...

  5. 五十五、SAP中调用系统自带的函数

    一.我们需要取一个月中的最后一天,代码如下 二.执行结果如下 三.以上为纯手打,错了好几次才改过来,还有一个办法就是系统自动生成,点击编辑->模式 四.输入需要调用的函数名字BKK_GET_MO ...

  6. C语言中如何调用另一个源文件里的函数

    在开发大型项目时,我们常常需要将一份源码分成多个源文件来进行编写,这样可以方便后期的维护.下面就介绍如何从一个源文件里调用另一个源文件的函数. 在源文件A1.c中调用A2.c 中的函数有两种方法: 1 ...

  7. C语言中的快速排序函数

    C库中有自带的快排函数 qsort() ; 它的函数原型为: void qsort(void * , size_t ,size_t size , int (__cdecl *)(const  void ...

  8. 如何在C语言中调用Swift函数

    在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...

  9. C语言中的自定义函数

    C语言中可以使用系统函数也可以使用自己的函数,就是自定义函数 自定义函数分为四种 第一种:无参无返回值的 函数的声明 void sayH(); 函数的实现 void sayH(){ printf(&q ...

随机推荐

  1. 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚

    题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...

  2. 分布式session的实现

    一.分布式Session的几种实现方式 1.基于数据库的Session共享 2.基于NFS共享文件系统3.基于memcached 的session,如何保证 memcached 本身的高可用性?4. ...

  3. Java 多线程编程

    1.synchronized/wait/notify package javamultithread; import java.util.logging.Level; import java.util ...

  4. 移动端浏览器body的overflow:hidden并没有什么作用

    今天突然遇到一个问题,使用li模拟select,但是碰到一个很尴尬的问题,给body加了overflow:hidden,但是body并没有禁止滚动条,滚动条依旧顺滑. <!DOCTYPE htm ...

  5. 学习 opencv---(8)非线性滤波:中值滤波,双边滤波

    正如我们上一篇文章中讲到的,线性滤波可以实现很多种不同的图像变换.然而非线性滤波,如中值滤波器和双边滤波器,有时可以达到更好的实现效果. 邻域算子的其他一些例子还有对 二值图像进行操作的形态学算子,用 ...

  6. CentOS6.3 重启后/etc/resolv.conf 被还原解决办法(转)

    今天一台服务器上不了网,设置了nameserver,重启后/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了.解决方法:停止Network Manag ...

  7. Unity3D 响应摇杆

    if (Input.GetKeyUp(KeyCode.Joystick1Button0)) { Debug.Log("Joystick1Button0"); } if (Input ...

  8. html5 canvas 实现倒计时 功能

    function showTime(a) { var b = { id: "showtime", //canvasid x: 60, //中心点坐标 X轴; y: 60, //中心 ...

  9. Android SDK Manager无法更新的解决[ 转]

    将下列内容行添加到hosts文件中: 74.125.237.1 dl-ssl.google.com 1.Windows C:\WINDOWS\system32\drivers\etc\Hosts 2. ...

  10. CPrimerPlus第11章第10题

    题目: 编写一个程序,读取输入,直到读入了10个字符串或遇到EOF,由二者中最先被满足的那个终止读取过程.这个程序可以为用户提供一个有5个选项的菜单:输出初始字符串列表.按ASCII顺序输出字符串.按 ...