[Explicación detallada de las preguntas reales del Grupo JavaB de la Copa Blue Bridge] Semana de fin de siglo (2013)

Descripción del Título

En la semana de fin de siglo, un
culto afirmó una vez que el 31 de diciembre de 1999 era el fin del mundo. Por supuesto, el rumor es contraproducente. Algunas personas dicen que al final de cierto siglo, el 31 de diciembre, si es lunes, será ...

¡Lo interesante es que el 31 de diciembre de cualquier año al final del siglo no puede ser lunes! Así que el "creador de rumores" lo cambió a domingo ...

El 31 de diciembre de 1999 es viernes, me gustaría preguntar: ¿Cuál de los años de fin de siglo más cercanos (es decir, xx99 años) a nosotros en el futuro, el 31 de diciembre será domingo (es decir, domingo)?

Conteste el año (solo escriba este número entero de 4 dígitos, no escriba información redundante como el 31 de diciembre)

Ideas para resolver problemas

Método 1: use la clase Calendar en el documento de la API.
Limitación: las preguntas que datan antes de 1970 no se pueden usar

La clase Calendar es una clase abstracta, proporciona algunos métodos para la conversión entre un momento específico y un conjunto de campos de calendario como AÑO, MES, DÍA_DE_MES, HORA, etc., y proporciona algunos métodos para manipular campos de calendario (como obtener la fecha de la próxima semana) método. El momento se puede expresar en milisegundos, que es el desplazamiento de la época (es decir, 00: 00: 00.000 el 1 de enero de 1970, hora media de Greenwich, calendario gregoriano).

Código de referencia

import java.util.Calendar;

public class Main {
    
    

	public static void main(String[] args) {
    
    
	
		Calendar calendar = Calendar.getInstance();
		for (int year = 1999; year < 10000; year += 100) {
    
    
			calendar.set(year, 11, 31);
			if (calendar.get(Calendar.DAY_OF_WEEK) == 1) {
    
     
				System.out.println(year);
				break;
			}
		}
	}
}

Resultado de la operación: 2299
Nota: 0 en el mes es enero y diciembre en esta pregunta debe ser 11; y 1 en la semana representa el domingo, y así sucesivamente.

Método 2: fórmula de cálculo de Kim Larson

y:年 m:月 d:日 w:星期几 
w= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 

注意:
1.w的取值范围是0,1,2,3,4,5,6,分别代表星期日,星期一,星期二,星期三,星期四,星期五,星期六。
2.今年的1、2月要换成去年的13、14月	
	eg:2020-1-1则换算成2019-13-1来代入公式计算。
3.这个公式可以直接计算出那个日期是星期几,但请注意!这类问题如果假设和真实情况不符的时候要记得换上偏移量,比如问题假设某个日期是星期一,而真实情况这天是星期二,那么我们计算出来的星期几也要-1,但请保证再1~7的环中。

Código de referencia

public class Main {
    
    

	public static void main(String[] args) {
    
    
		int y = 1999;
		int m = 12;
		int d = 31;
		int w;
		for(;y<10000;y+=100) {
    
    
			 w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
			 if(w==0) {
    
    
				 System.out.println(y);
				 break;
			 }
		}
	}
}

Método tres:
Limitación de la herramienta de Excel : No se puede utilizar para problemas antes de 1970.
Ventajas: Rápido y ahorra tiempo

  1. Ingrese la fecha, configure el formato de celda, escriba como fecha
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

  2. Cambie el tipo de B1 a aaaa, ingrese = A1 en B1
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

  3. Ingrese 2099/12/31 en A2 después de la confirmación

  4. Después de seleccionar A1 y A2, el menú desplegable puede aumentar en un ciclo de 100 años.
    Inserte la descripción de la imagen aquí

  5. Tire hacia abajo de B1 para
    Inserte la descripción de la imagen aquí
    obtener 2299

Creación y aprendizaje para principiantes, si hay errores, por favor dé consejos, ¡gracias!

Supongo que te gusta

Origin blog.csdn.net/m0_46226318/article/details/113057822
Recomendado
Clasificación