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 |
|
Sensación:
El STL de Java es muy fácil de usar, ¡me gusta un poco Java!