title: 蓝桥杯28-日期划分
date: 2019-11-28 19:24:43
categories:
- 蓝桥杯
tags: - 蓝桥杯
蓝桥杯28-日期划分
-
题目描述:
11.28
问题描述
已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
输入只有一行
YYYY MM DD
输出格式
输出只有一行
W
样例输入
2011 11 11
样例输出
5
数据规模和约定
1599 <= YYYY <= 2999 1 <= MM <= 12 1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期 1 <= W <= 7,分别代表周一到周日 -
分析:我把上面问题归类为3中情况
- 第一类情况是>2011年情况,这里我有个想法,比如如果你是2015年2月21日的话,我选择先把2011年到2015年1月1日间的整年我给过完了,那么时间上不就只剩下2015年1月1日到2月21日吗?再和2011年1月1日到11月11日相比较,我们可以得出结论了
- 第二类情况是<2011年情况,这里我同样想法,比如如果你是2009年11月11日那么我们这么理解吧,我们计算2009年1月1日到2011年11月11日的时间,然后同样道理减去2009年1月1日到11月11日时间
- 第三类情况,在2011年本年,这里同上所诉
-
代码实现:这里代码就不分析了,按照上面三种情况理解就是答案
import java.util.Scanner; //11.28 // 问题描述 // 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。 // 输入格式 // 输入只有一行 // YYYY MM DD // 输出格式 // 输出只有一行 // W // 样例输入 // 2011 11 11 // 样例输出 // 5 // 数据规模和约定 // 1599 <= YYYY <= 2999 1 <= MM <= 12 1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期 1 <= W <= 7,分别代表周一到周日 public class day1128 { public static int [] months = new int[]{31,28,31,30,31,30,31,31,30,31,30,31}; public static void main(String[] args) { Scanner in = new Scanner(System.in); int year = in.nextInt(); int month = in.nextInt(); int day = in.nextInt(); int count = 0; if(year>2011){ //这里我需要表示的是转换成相邻两个年 count = 315; for(int i = 2011;i<year;i++){ //闰年的情况 if((i%4==0&&i%100!=0)||i%400==0){ count-=366%7; }else{ count-=365%7; } } if((year%4==0&&year%100!=0)||year%400==0){ //最后一年是闰年 for (int i=0;i<month-1;i++){ count-=months[i]; } count-=(day+1); }else { //最后一年是闰年 for (int i=0;i<month-1;i++){ count-=months[i]; } count-=day; } }else if(year<2011){ //这里我需要表示的是转换成相邻两个年 for(int i = year;i<=2010;i++){ //闰年的情况 if((i%4==0&&i%100!=0)||i%400==0){ count+=366%7; }else{ count+=365%7; } } count+=315; if((year%4==0&&year%100!=0)||year%400==0){ //最后一年是闰年 for (int i=0;i<month-1;i++){ count-=months[i]; } count-=(day+1); }else { //最后一年是闰年 for (int i=0;i<month-1;i++){ count-=months[i]; } count-=day; } }else{ count+=315; //最后一年是闰年 for (int i=0;i<month-1;i++){ count-=months[i]; } count-=day; } int i = ((5-count%7)+7)%7; if(i==0) System.out.println(7); else System.out.println(i); } }