zoukankan      html  css  js  c++  java
  • ECNU 2977 成绩排序

    ECNU 2977 成绩排序

    链接

    https://acm.ecnu.edu.cn/problem/2977

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    C 语言课程的上机考试有 M 道题目,从第 1 题至第 M 题每道题的分值为 均为大于的正整数

    现给定分数线,请编写程序输出不低于该分数线的学生人数,并将他 (她) 们的成绩按降序输出,若有多名学生考试成绩相同,则按他 (她) 们学号的升序输出。

    输入格式
    第 1 行:一个整数 () 为问题数。

    对于每组测试数据:

    第 行是三个正整数:学生人数、考试题目数 、分数线

    第 行有 个正整数:分别为第 题至第 题的分值,,;

    接下来 N 行,每行给出一名学生的学号(长度为 的字符串,学号的第一个字符可能为 )、该学生解出的题目总数 、以及这 道题的题号(题号由 到 )。

    输出格式
    对于每个问题,输出一行问题的编号( 开始编号,格式:case #0: 等)

    然后首先在一行中输出不低于分数线的学生人数,接下来每行按考试成绩从高到低输出上分数线的学生的学号与成绩,其间用 1 个空格分隔。若有多名学生成绩相同,则按他 (她) 们学号的升序输出。

    样例
    input
    3
    4 5 25
    10 10 12 13 15
    10091130015 3 5 1 3
    10091130013 5 2 4 1 3 5
    10091130012 2 1 2
    10091130011 3 2 3 5
    2 3 20
    10 10 10
    10101130012 0
    10101130019 2 1 2
    1 2 40
    10 30
    10101130018 1 2
    output
    case #0:
    3
    10091130013 60
    10091130011 37
    10091130015 37
    case #1:
    1
    10101130019 20
    case #2:
    0

    思路

    比较繁琐的一道题,输入,控制限制条件,统计学生分数,排序,再按照高于分数线的学生数目输出。

    代码

      public static class Stu {
    
        public String id;
        public int sco;
    
        public Stu(String id, int sco) {
          this.id = id;
          this.sco = sco;
        }
      }
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int temp = 0; temp < t; temp++) {
          int n = sc.nextInt();
          int m = sc.nextInt();
          int g = sc.nextInt();
          int count = 0;
          int[] a = new int[m];
          for (int i = 0; i < m; i++) {
            a[i] = sc.nextInt();
          }
          Stu[] s = new Stu[n];
          for (int i = 0; i < n; i++) {
            int sum = 0;
            String id = sc.next();
            int timu = sc.nextInt();
            for (int j = 0; j < timu; j++) {
              int tt = sc.nextInt();
              sum += a[tt - 1];
            }
            if (sum >= g) {
              count++;
            }
            s[i] = new Stu(id, sum);
          }
          Arrays.sort(s, new Comparator<Stu>() {
            @Override
            public int compare(Stu o1, Stu o2) {
              if (o1.sco != o2.sco) {
                return o2.sco - o1.sco;
              } else {
                StringBuffer sb1 =new StringBuffer(o1.id);
                StringBuffer sb2 =new StringBuffer(o2.id);
                for(int i=0;i<sb1.length();i++)
                {
                  if(sb1.charAt(i)!=sb2.charAt(i)){
                    return sb1.charAt(i)-sb2.charAt(i);
                  }
                }
                return 1;
              }
            }
          });
          System.out.println("case #" + temp + ":");
          System.out.println(count);
          for (int i = 0; i < count; i++) {
            System.out.println(s[i].id + " " + s[i].sco);
          }
        }
      }
    
    
  • 相关阅读:
    投资人的能量往往大多远远不仅于此,他能站在不同的角度和高度看问题(要早点拿投资,要舍得让出股份)——最好不要让 Leader 一边做技术、一边做管理,人的能力是有限的,精力也是有限的
    汇编实现获取CPU信息
    Web service的学习资源
    重启网卡的几种方法(命令行,API,
    认知服务
    平台化项目多语言架构
    移动跨平台开发框架Ionic开发一个新闻阅读APP
    net core 1.0 实现负载多服务器单点登录
    canvas1
    asp.net core + angular2
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14332272.html
Copyright © 2011-2022 走看看