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



  算法提高 日期计算  
时间限制: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;
}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

To-strive

你的鼓励是我创作的最大鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值