您的位置:首页 > 编程语言 > Java开发

算法提高 日期计算 蓝桥杯java详解

2016-02-15 00:04 691 查看
算法提高 日期计算

时间限制:1.0s 内存限制:256.0MB


问题描述

  已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。

输入格式

  输入只有一行

  YYYY MM DD

输出格式

  输出只有一行

  W

数据规模和约定

  1599 <= YYYY <= 2999

  1 <= MM <= 12

  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期

  1 <= W <= 7,分别代表周一到周日

样例输入

2011 11 11

样例输出

5

 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70

import java.util.Scanner;public class Main {	public static void main(String[] args) {		Scanner input=new Scanner(System.in);		int year=input.nextInt();		int month=input.nextInt();		int day=input.nextInt();		int sum;		int sum1;        sum=getyd(year);
        //计算真实的天数        if(year<2011){        	sum=sum-getmd(year,month,day);            //判断给出的某年某月是星期几        	sum1=(sum%7==6)?7:Math.abs(6-(sum%7));        	System.out.println(sum1);        }else {        	sum=sum+getmd(year,month,day);        	sum1=((6+(sum%7))>7)?(6+(sum%7))%7:(6+(sum%7));        	System.out.println(sum1);        }	}		//计算的与给出的月份和已知的月份的总共月数  public static int getmd(int year,int month,int day) {	  int sum1=0;		for(int i=1;i<month;i++){			if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){				sum1+=31;			}else if(i==4||i==6||i==9||i==11){				sum1+=30;			}else if(i==2&&leap(year)){				sum1+=29;			}else if(i==2&&!leap(year)){				sum1+=28;			}		}		sum1=sum1+day-1;		return sum1;	}	//计算年份的天数	public static int getyd(int year) {		int sum=0;       if(year<=2011){    	   for(int i=year;i<2011;i++){    		   if(leap(i)){    			  sum+=366;     		   }else sum+=365;    	   }	   }else if(year>2011){    	   for(int i=2011;i<year;i++){    		   if(leap(i)){    			   sum+=366;    		   }else sum+=365;    	   }       }		return sum;	}	//判断给出的年份是否是闰年    public static boolean leap(int year) {		if(year%4==0&&year%100!=0){			return true;		}else if(year%400==0){			return true;		}else		return false;	}
}


反馈

帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: