Clasificación de tarjetas de identificación del algoritmo Java

Descripción de la pregunta

La Oficina de Seguridad ha buscado un lote (n) de números de identificación y espera ordenarlos de mayor a menor por fecha de nacimiento.Si son las mismas fechas, ordenar por tamaño del número de identificación. El número de identificación se compone de 18 dígitos y la fecha de nacimiento es del 7 al 14.

Entrada
Descripción de la entrada:
  La primera línea contiene un número entero n, lo que indica que hay n números de identificación
  Las n líneas restantes, cada línea contiene un número de identificación.
Ejemplo de entrada:
5
466272307503271156
215856472207097978
234804580401078365
404475727700034980
710351408803093165

producción

Descripción de salida:
  Números de identificación ordenados de mayor a menor por fecha de nacimiento, uno por línea
Muestra de salida: 4662 7230750 3271156 710351408803093165 215856472207097978 234804580401078365
404475727700034980



SUGERENCIA: Límite de tiempo: 1,0 s Límite de memoria: 256,0 MB
  n<=100000

Ideas para resolver problemas

Primero puede interceptar la cadena de cumpleaños de la tarjeta de identificación y ordenarla, y luegoOrdene el tamaño de la tarjeta de identificación (esto garantiza que cuando los cumpleaños sean los mismos, la salida también se basará en el tamaño de la tarjeta de identificación)), y finalmente envíe las tarjetas de identificación en orden según el tamaño del cumpleaños.

código

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    
    

    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        int m=scanner.nextInt();
        String []a=new String[m];
        for (int i=0;i<m;i++){
    
    
            a[i]=scanner.next();        //输入数据
        }
        String []b=new String[m];
        for (int j=0;j<m;j++){
    
    
            b[j]=a[j].substring(6,14);  //截取生日
        }
        Arrays.sort(b);     //对生日进行排序
        Arrays.sort(a);     //对身份证的前数字的大小来排序
        for (int k=m-1;k>=0;k--){
    
    
            for (int n=m-1;n>=0;n--){
    
    
                if (a[n].substring(6,14).equals(b[k])){
    
     //依次输出身份证排序大且生日排序大的身份证
                    System.out.println(a[n]);
                }
            }
        }
    }
}

Guess you like

Origin blog.csdn.net/joreng/article/details/123915909