La fecha del grupo javab de la Blue Bridge Cup 2017 (usando TreeSet y conversión de formato de fecha SimpleDateFormat)

Descripción del problema

  Xiao Ming está clasificando un lote de documentos históricos. En estos documentos históricos aparecen muchas fechas. Xiao Ming sabe que estas fechas son del 1 de enero de 1960 al 31 de diciembre de 2059. Lo que preocupa a Xiaoming es que el formato de estas fechas es muy inconsistente, algunos usan año / mes / día, algunos usan mes / día / año y algunos usan día / mes / año. Lo que es más problemático es que los dos primeros dígitos del año también se omiten, por lo que hay muchas fechas posibles correspondientes a una fecha en la literatura.


  Por ejemplo, 02/03/04 puede ser 04 de marzo de 2002, 03 de febrero de 2004 o 02 de marzo de 2004.


  Dada una fecha en la literatura, ¿puede ayudar a Xiao Ming a determinar qué fechas posibles le corresponden?

Formato de entrada

  Una fecha, el formato es "AA / BB / CC". (0 <= A, B, C <= 9)

Formato de salida

  Salida de varias fechas diferentes, una línea para cada fecha, el formato es "aaaa-MM-dd". Se organizan varias fechas de la mañana a la noche.

Entrada de muestra

02/03/04

Salida de muestra

2002-03-04
2004-02-03
2004-03-02

Tamaño de datos y convención

  Consumo máximo de memoria (incluida la máquina virtual) <256M
  Consumo de CPU <1000ms Imprima


  estrictamente de acuerdo con los requisitos y no imprima contenido adicional superfluo como: "Por favor ingrese ...".

  Nota: La
  función principal debe devolver 0;
  solo use los estándares ANSI C / ANSI C ++;
  no llame a funciones especiales que dependan del entorno de compilación o del sistema operativo.
  Todas las funciones dependientes deben estar #include <xxx> explícitamente en el archivo de origen.
  Los archivos de encabezado comunes no se pueden omitir a través de la configuración del proyecto.


  Al enviar el programa, preste atención a seleccionar el tipo de lenguaje y el tipo de compilador deseados.

Análisis:

A partir de la pregunta, en primer lugar, se divide en tres situaciones: año, mes, día, mes, año y día, mes, año.

En segundo lugar, determine si la fecha es legal, especialmente febrero, 29 días en años bisiestos, 28 días en otros años

Además, la clasificación se puede deduplicar como 02/02/02 y solo generar un tipo.

Aunque Java es lento, hay mucha gente.

Determine si la fecha es legal:

La clase SimpleDateFormat puede determinar primero el tipo de salida

El tipo de tiempo puede referirse al siguiente blog:

https://blog.csdn.net/qq_27093465/article/details/53034427

Luego juzgue si es legal llamando al método de formato

Clasificación y deduplicación: el conjunto se puede deduplicar, TreeSet se puede deduplicar y las reglas de clasificación se pueden personalizar.

Referencia específica:

https://blog.csdn.net/qq_33642117/article/details/52040345

Hombre de pocas palabras:



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Main {
	//50 points
	static boolean check(String str)
	{
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
//SimpleDateFormat类格式化数据
		format.setLenient(false);
// 严格控制日期转换,不常规的格式就变成非法的了,因而try catch才能显得游刃有余
//format.setLenient(true)功能关闭
		try{
			format.parse(str); 
		}
		catch(Exception e)
		{
			return false;
		}
		return true;
	}
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
		String str=bfr.readLine();
		String s[]=str.split("/");
		int a[]=new int[3];
		a[0]=Integer.parseInt(s[0]);
		a[1]=Integer.parseInt(s[1]);
		a[2]=Integer.parseInt(s[2]);
		
		//年月日
		String ymd=(a[0]>59? "19" :"20")+(a[0]>10? a[0]:"0"+a[0])+"-"+(a[1]>10? a[1]:"0"+a[1])+"-"+(a[2]>10? a[2]:"0"+a[2]);
		//月日年
		String mdy=(a[2]>59? "19" :"20")+(a[2]>10? a[2]:"0"+a[2])+"-"+(a[0]>10? a[0]:"0"+a[0])+"-"+(a[1]>10? a[1]:"0"+a[1]);
		//日月年
		String dmy=(a[2]>59? "19" :"20")+(a[2]>10? a[2]:"0"+a[2])+"-"+(a[1]>10? a[1]:"0"+a[1])+"-"+(a[0]>10? a[0]:"0"+a[0]);
		
		Set<String> set=new TreeSet<String>();//排序加去重
		
		if(check(ymd)) set.add(ymd);
		if(check(mdy)) set.add(mdy);
		if(check(dmy)) set.add(dmy);
		
		Iterator iterator=set.iterator();//迭代器:
		while(iterator.hasNext())
			System.out.println(iterator.next());
		}
	}

Detalles de la evaluación:

registro detallado
Número de punto de evaluación Resultados de evaluación Puntuación uso de CPU Uso de memoria Descargar datos de evaluación
1 correcto 12,50 250 ms 22,03 MB Entrada y  salida
2 correcto 12,50 234ms 21,58 MB Privilegios VIP
3 correcto 12,50 156 ms 21,65 MB Privilegios VIP
4 correcto 12,50 250 ms 21,66 MB Privilegios VIP
5 correcto 12,50 203 ms 21,71 MB Privilegios VIP
6 correcto 12,50 203 ms 21,76 MB Privilegios VIP
7 correcto 12,50 203 ms 21,98 MB Privilegios VIP
8 correcto 12,50 156 ms 21,99 MB Privilegios VIP

Sensación:

El STL de Java es muy fácil de usar, ¡me gusta un poco Java!

 

Supongo que te gusta

Origin blog.csdn.net/Look_star/article/details/88685669
Recomendado
Clasificación