[Explication détaillée des vraies questions du groupe JavaB de la Blue Bridge Cup] Semaine de la fin du siècle (2013)

Description du titre

Pendant la semaine de la fin du siècle, une
secte a prétendu que le 31 décembre 1999 était la fin du monde. Bien sûr, la rumeur est vouée à l'échec. Certains disent qu'au bout d'un certain siècle, le 31 décembre, si c'est lundi, ça va ...

Ce qui est intéressant, c’est que le 31 décembre d’une année à la fin du siècle ne peut pas être un lundi!

Le 31 décembre 1999 est un vendredi, je voudrais demander: laquelle des années de fin de siècle les plus proches (c'est-à-dire xx99 ans) pour nous dans le futur, le 31 décembre sera dimanche (c'est-à-dire dimanche)?

Veuillez répondre l'année (écrivez simplement cet entier à 4 chiffres, n'écrivez pas d'informations redondantes comme le 31 décembre)

Idées de résolution de problèmes

Méthode 1: utilisez la classe Calendar dans le document API.
Limitation: les questions qui datent avant 1970 ne peuvent pas être utilisées

La classe Calendar est une classe abstraite, elle fournit des méthodes pour la conversion entre un moment spécifique et un ensemble de champs de calendrier tels que YEAR, MONTH, DAY_OF_MONTH, HOUR, etc., et fournit des méthodes pour manipuler les champs de calendrier (comme l'obtention la date de la semaine suivante). Le moment peut être exprimé en millisecondes, qui est le décalage par rapport à l'époque (c'est-à-dire 00: 00: 00.000 le 1er janvier 1970, Greenwich Mean Time, calendrier grégorien).

Code de référence

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;
			}
		}
	}
}

Résultat de l'opération: 2299
Remarque: 0 dans le mois est janvier, et décembre dans cette question doit être 11; et 1 dans la semaine représente dimanche, et ainsi de suite.

Méthode 2: formule de calcul 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的环中。

Code de référence

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éthode 3:
Limitation de l' outil Excel : ne peut pas être utilisé pour les problèmes avant 1970.
Avantages: rapide et gagner du temps

  1. Entrez la date, définissez le format de cellule, tapez comme date
    Insérez la description de l'image ici
    Insérez la description de l'image ici

  2. Changez le type de B1 en aaaa, entrez = A1 dans B1
    Insérez la description de l'image ici
    Insérez la description de l'image ici

  3. Entrez 2099/12/31 dans A2 après confirmation

  4. Après avoir sélectionné A1 et A2, le menu déroulant peut augmenter en un cycle de 100 ans
    Insérez la description de l'image ici

  5. Tirez B1 pour
    Insérez la description de l'image ici
    obtenir 2299

Création et apprentissage novices, s'il y a des erreurs, merci de donner des pointeurs, merci!

Je suppose que tu aimes

Origine blog.csdn.net/m0_46226318/article/details/113057822
conseillé
Classement