Tips:此题比较简单,最好将每一个学生的信息构建一个结构体,另外需要注意的是,若分数相同,排序按姓名排序,我看网上很多都是使用<algorithm>中的sort算法,只需重写cmp函数即可。

该方法如下所示:

  1. #include<aigorithm>
  2. bool cmp(const node &a,const node &b)
  3. {
  4. if(a.sum == b.sum)
  5. return strcmp(a.name,b.name) < ? : ;
  6. else
  7. return a.sum > b.sum;
  8. }

但由于我自己是采用纯C语言代码提交的,所以排序时时是自己写的sort函数,采用冒泡排序,虽然较慢,不过也可以AC

  1. void sort(struct node stu[],int n)
  2. {
  3. int i = ;
  4. int j = ;
  5. for(i = ;i < n;i++)
  6. {
  7. for(j = i ; j < n ; j++)
  8. {
  9. if(stu[i].sum<stu[j].sum) //按分值由大到小排序
  10. {
  11. struct node temp = stu[i];
  12. stu[i] = stu[j];
  13. stu[j] = temp;
  14. }else if(stu[i].sum == stu[j].sum)
  15. {
  16. if(strcmp(stu[i].name,stu[j].name) > )
  17. {
  18. struct node temp = stu[i];
  19. stu[i] = stu[j];
  20. stu[j] = temp;
  21. }
  22. }
  23. }
  24. }
  25. }

最后附上完整源程序:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSTU 1005
  4. struct node
  5. {
  6. char name[]; //姓名
  7. int num; //完成题目数量
  8. int sum; //得分
  9. }stu[MAXSTU];
  10.  
  11. void sort(struct node stu[],int n)
  12. {
  13. int i = ;
  14. int j = ;
  15. for(i = ;i < n;i++)
  16. {
  17. for(j = i ; j < n ; j++)
  18. {
  19. if(stu[i].sum<stu[j].sum) //按分值由大到小排序
  20. {
  21. struct node temp = stu[i];
  22. stu[i] = stu[j];
  23. stu[j] = temp;
  24. }else if(stu[i].sum == stu[j].sum)
  25. {
  26. if(strcmp(stu[i].name,stu[j].name) > )
  27. {
  28. struct node temp = stu[i];
  29. stu[i] = stu[j];
  30. stu[j] = temp;
  31. }
  32. }
  33. }
  34. }
  35. }
  36.  
  37. int main()
  38. {
  39. int N = ; //考生人数
  40. int M = ; //考题数量
  41. int G = ; //分数线
  42. int score[] = {};//每道题的分值
  43. int i=,j=;
  44. int cnt = ;
  45. while(scanf("%d",&N) && N != )
  46. {
  47. scanf("%d %d",&M,&G);
  48. for(i=;i<M;i++)//读入第二行分值数据
  49. {
  50. scanf("%d",&score[i]);
  51. }
  52. cnt = ;
  53. for(i=;i<N;i++)//循环读入每隔学生的信息数据
  54. {
  55. scanf("%s%d",stu[i].name,&stu[i].num);
  56. stu[i].sum = ;
  57. while(stu[i].num--)
  58. {
  59. scanf("%d",&j);
  60. stu[i].sum += score[j-];
  61. }
  62. if(stu[i].sum >= G)
  63. cnt++;
  64. }
  65.  
  66. sort(stu,N);
  67. printf("%d\n",cnt);
  68. for(i=;i<N;i++)
  69. {
  70. if(stu[i].sum >= G)
  71. {
  72. printf("%s %d\n",stu[i].name,stu[i].sum);
  73. }
  74. }
  75.  
  76. }
  77. return ;
  78. }

杭电oj1236 排名的更多相关文章

  1. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  2. 高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”

    按 被中科大软件学院二年级研究生 HCOONa 骂为“误人子弟”之后(见:<中科大的那位,敢更不要脸点么?> ),继续“误人子弟”. 问题: 题目:(感谢 王爱学志 网友对题目给出的翻译) ...

  3. 2017杭电ACM集训队单人排位赛 - 6

    2017杭电ACM集训队单人排位赛 - 6 排名 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 59 1 X X 1 1 X X 0 1 ...

  4. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  5. 杭电acm 1002 大数模板(一)

    从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...

  6. 杭电OJ——1198 Farm Irrigation (并查集)

    畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...

  7. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  8. 杭电ACM2076--夹角有多大(题目已修改,注意读题)

    杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...

  9. 杭电ACM2092--整数解

    杭电ACM2092--整数解    分析 http://acm.hdu.edu.cn/showproblem.php?pid=2092 一个YES,一个Yes.试了10几次..我也是无语了..哪里都不 ...

随机推荐

  1. Android的debug.keystore拒绝访问导致的生成异常及解决方案

    构建Android应用程序的时候输出异常:[apkbuilder] keytool 错误: java.io.FileNotFoundException: C:\Users\my\.android\de ...

  2. 【转】如何定制android源码的编译选项 & 后期安装? ---- 不错

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd0100z3o9.html Android编译过程比较长,配置起来也很麻烦.现仅就工作遇到的问题做个总结.所用硬 ...

  3. cf478C Table Decorations

    C. Table Decorations time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. C pointers

    指向整型数组指针int (*p)[10] = matrix;增加这个指针的值使它指向下一个整型数组 指向整型指针int *pi = &matrix[0][0];int *pi = &m ...

  5. curl 浏览器模拟请求实战

    1,curl 常用选项

  6. JDK5新特性之线程同步集合(五)

    一. 传统集合: 传统方式下的Collection在迭代集合时, 不同意对集合进行改动: public class CollectionModifyExceptionTest { public sta ...

  7. RequireJs运行原理

    在require中,根据AMD(Asynchronous Module Definition)的思想,即异步模块加载机制,其思想就是把代码分为一个一个的模块来分块加载,这样无疑可以提高代码的重用. 在 ...

  8. Linux三种关机/重启系统的命令

    Linux提供了三种关机/重启系统的命令:shutdown.halt和reboot.这三个命令在一般情况下只有 系统的超级用户(一般是指root)才可以执行.输入没有参数的shutdown命令,两分钟 ...

  9. PHP学习笔记1.2——预定义变量参考

    预定义变量和用户自定义变量在使用上没有区别,大多数预定义变量的执行结果都是服务器的相关信息(如:版本号.路径.错误参数等),所以我们很少将其用于网站前台开发,如果被别有用心得人知道了后,会严重威胁服务 ...

  10. jquery初学者易犯的错误

    1 获取类或者对象的时候,忘记写“#”或者“.” 错误案例: $(document).ready(function(){ $("btn1").click(function(){ a ...