题目描述
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期一则会…
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日…
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
输入
没有输入。
输出
2299
一、题解分析:
方法一
思路:循环中先设置cal日历对象的时间为当前年数的12月31号,注意月份是从0开始的,设置时要将12月31日设置为11月31日,然后获取该日期是星期几。因为java日历的数组中{1,2,3,4,5,6,7}依次对应{星期日,星期一,星期二,星期三,星期四,星期五,星期六},所以如果是星期日,那么get()方法返回的数值t应为1
代码如下:
package 世纪末的星期;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar calendar=Calendar.getInstance();
for(int i=1999;;i+=100) {
calendar.set(Calendar.YEAR, i);
calendar.set(Calendar.MONTH,11);//设置月份,因为月份是从0开始的
calendar.set(Calendar.DATE,31);
//因为java日历的数组中{1,2,3,4,5,6,7}依次对应{星期日,星期一,星期二,星期三,星期四,星期五,星期六},所以如果是星期日,那么get()方法返回的数值应为1
int t =calendar.get(Calendar.DAY_OF_WEEK);//获得该天对应的星期几。
if(t==1) {
System.out.print(i);
break;//找到第一个就要停止,注意break的使用
}
}
}
方法二
思路:该题就是计算“xx99”年距离2000.1.1有几天。例如:2000.1.1距离1999.12.31有一天,则2000.1.1是星期(1+5)%7 = 6,是星期六。则只需计算出xx99.12.31距离2000.1.1的天数,再加上5余7,然后判断余数是否是0就OK了!
附带说明:判断是闰年的方法:
普通年能被4整除且不能被100整除的为闰年,世纪年能被400整除的是闰年。
代码如下:
package 世纪末的星期;
public class Main2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int year=2000;
int sum=0;
for(year=2000;year<10000;year++) {
if(year % 400==0 ||(year % 4==0&&year % 100!=0)) {
sum+=366;
}
else
sum+=365;
if((sum+5)%7==0&& (year+"").endsWith("99")) {
System.out.print(year);
break;
}
}
}
}
耶!