zoukankan      html  css  js  c++  java
  • ECNU 48 奇怪的字符串排序

    ECNU 48 奇怪的字符串排序

    链接

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

    题目

    单点时限: 1.0 sec

    内存限制: 256 MB

    定义函数 Sort,对一个字符串数组的元素按照字符串的首字符的升序进行排序。首字符相同的字符串按照字符串本身的字典序降序进行排序。

    字符串中只会出现小写英文字母。

    include <stdio.h>

    void sort(char (p)[81], int n)
    /
    PreCondition:
    p 指向一个二维字符数组,n 是范围为 2-100 的数组元素个数
    PostCondition:
    按要求对数组进行排序
    */
    {

    }

    int main() {
    char s[100][81];
    int n, i;
    scanf("%d", &n);
    for (i = 0; i < n; i++) scanf("%s", s[i]);
    sort(s, n);
    for (i = 0; i < n; i++) printf("%s ", s[i]);
    return 0;
    }

    样例
    input
    24
    alpha
    beta
    gamma
    delta
    epsilon
    zeta
    eta
    theta
    iota
    kappa
    lambda
    mu
    nu
    xi
    omicron
    pi
    rho
    sigma
    tau
    upsilon
    phi
    chi
    psi
    omega
    output
    alpha
    beta
    chi
    delta
    eta
    epsilon
    gamma
    iota
    kappa
    lambda
    mu
    nu
    omicron
    omega
    psi
    pi
    phi
    rho
    sigma
    theta
    tau
    upsilon
    xi
    zeta

    思路

    还是比较,这里就有点坑,第一位要升序排序,之后才用字典序排序,所以不如重写比较器,先跑第一位用if,之后用else来跑剩下的位数。
    考虑到效率,用了stringbuffer,但是时间应该够的,所以优不优化无所谓。

    代码

      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] str = new String[n];
        for (int i = 0; i < n; i++) {
          str[i] = sc.next();
    
        }
        Arrays.sort(str, new Comparator<String>() {
          @Override
          public int compare(String o1, String o2) {
            if (o1.charAt(0) != o2.charAt(0)) {
              return o1.charAt(0) - o2.charAt(0);
            } else {
              StringBuffer sb1 = new StringBuffer(o1);
              StringBuffer sb2 = new StringBuffer(o2);
              for (int i = 1; i < Math.min(sb1.length(), sb2.length()); i++) {
                if (sb1.charAt(i) != sb2.charAt(i)) {
                  return sb2.charAt(i) - sb1.charAt(i);
                }
              }
              return sb2.length() - sb1.length();
            }
          }
        });
        for (int i = 0; i < n; i++) {
          System.out.println(str[i]);
        }
      }
    
  • 相关阅读:
    如何让你的Sublime和Codeblocks支持C++11
    Python print不换行输出的替代方法
    阶梯博弈
    hdu4633_Polya定理
    Ural_1169_Pairs
    ACM竞赛中的魔方问题专题(不定时更新)
    LintCode 35. 翻转链表
    windows中mysql5.7中配置中文字符集和默认datadir
    CentOS7使用打开关闭防火墙与端口
    关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14314816.html
Copyright © 2011-2022 走看看