• ECNU 2947 行数据的排序


    ECNU 2947 行数据的排序

    链接

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

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    有 n 数据,每行有若干数量不等的整数组成。现在要对这 n 据排序。

    排序原则为:

    首先比较行中的第一个数的值,将第一个数大的行排在前面;

    若第一个数相等的话,则按照第二个数的值排序(若某行没有第二个数,则该行排在后面);

    若第二个数还是相等的话,则比较第三个数,依次类推。

    例如:

    14 38 11 89

    27 34

    27 12 34

    27

    92 2 3 1

    17 2
    排序的结果为:

    92 2 3 1

    27 34

    27 12 34

    27

    17 2

    14 38 11 89

    输入格式
    第 1 行:整数 t() 为问题数

    第 2 行:第一个问题的整数n()

    第 3 ∽ N+2 行:第一个问题的每行的数据 ai 和表示行结束的标志-1, 数据个数。, 数据之间由一个空格分隔。

    后面是第 2-t 个问题的数据。格式与第一个问题相同。

    输出格式
    对于每个问题,输出排序后的结果。

    格式为:每行输出一行数据,数据之间有一个空格。

    思路

    蛮离谱的一道题,难倒是不难,但是很麻烦。
    用比较器,建立类,每个类存放一行数据,加上length表示数据个数。
    比较器比较,在可选长度内,从头比到尾,不然的话比较长度即可。
    调节格式输出。

    代码

       public static class Team {
        public int[] a = new int[52];
        public int length;
      }
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int i = 0; i < t; i++) {
          int n = sc.nextInt();
          Team[] team = new Team[n];
          for (int j = 0; j < n; j++) {
            team[j] = new Team();
          }
    
          for (int j = 0; j < n; j++) {
            int count = 0;
            while (true) {
              int temp = sc.nextInt();
              if (temp == -1) {
                break;
              }
              team[j].a[count] = temp;
              count++;
            }
            team[j].length = count;
          }
          Arrays.sort(team, new Comparator<Team>() {
            @Override
            public int compare(Team o1, Team o2) {
              for (int i = 0; i < Math.min(o1.length, o2.length); i++) {
                if (o1.a[i] != o2.a[i]) {
                  return o2.a[i] - o1.a[i];
                }
              }
              return o2.length - o1.length;
            }
          });
    
          for (int j = 0; j < n; j++) {
            for (int k = 0; k < team[j].length; k++) {
              System.out.print(team[j].a[k] + " ");
            }
            System.out.println();
          }
        }
    
      }
    
  • 相关阅读:
    表示数值的字符串(C++描述)
    单链表是否有环及环入口点
    医院信息运维系统-信息科专用运维系统
    c# List 按类的指定字段排序
    运维系统说明
    更新库下载
    mysql数据库备份
    网络编程基础
    面向对象和过程,一样的价格,不一样的口味
    模块的导入顺序细节
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14314724.html
Copyright © 2020-2023  润新知