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

第四届蓝桥杯 省赛 JavaB组 世纪末的星期

2017-03-12 16:55 267 查看
    曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。

    还有人称今后的某个世纪末的12月31日,如果是星期一则会....

    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 

    于是,“谣言制造商”又修改为星期日......

    1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

    请回答该年份(只写这个4位整数,不要写12月31等多余信息)

答案:2299

思路:循环中先设置cal日历对象的时间为当前年数的12月31号,然后通过if语句和get()方法获取该日期是星期几。因为java日历的数组中{1,2,3,4,5,6,7}依次对应{星期日,星期一,星期二,星期三,星期四,星期五,星期六},所以如果是星期日,那么get()方法返回的数值应为1

import java.util.Calendar;
import java.util.Date;

public class Main {
public static void main(String[]args){
Calendar cal=Calendar.getInstance();//获取当天某指定点上的时间
for(int i=1999;;i+=100){
cal.setTime(new Date(i-1900,11,31));
if(cal.get(Calendar.DAY_OF_WEEK)==1){
System.out.println(i);
break;
}
}
}
}

思路2:
本题计算xx99年12月31距当时比赛日期2000.1.1有几天。题目已知1999年的12月31日是星期五,2000.1.1距1999.12.31有一天,(5+1)%7=6,是星期六。即是计算纪元年最后一天距离2000.1.1有多少天,加5模7便知道是星期几。

public class Main {
public static void main(String[] args)
{
int year = 2000;
int total = 0;
for( ; ; year++) {
if(year%400==0 || (year%4==0 && year%100!=0)){ //闰年
total += 366;
}else {
total += 365;
}
if((total+5)%7 == 0 && (year+"").endsWith("99")){
System.out.println(year);
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法 蓝桥杯