------文章底部代码分享
一、题目
标题:世纪末的星期
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期一则会....
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日.
1999年的12月31日是星期五,请问:未来bei哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
二、 解题
(1)Calendar日历法
2.1.1
创建一个 main 方法,导入日历 Calender 类,并实例化;
2.1.2
添加所需要的 for 循环,题目要求是查找 1999 年后为星期日的世纪末,所以在 1999 年的基础上每次循环增加 100 年正好每次都是世纪末;
2.1.3
将每个世纪末的 12 月 31 日传入到实例化对象中;
2.1.4
利用 Calender 获取 calender 实例对象存储日期所对应的星期,如果为周一则打印年份并 break 出整个循环;
(2)暴力解题法
2.2.1
创建一个 main 方法,用变量 weeks 存储 1999 年 12 月 31 日的星期,然后通过循环将每一年遍历出来;
2.2.2
因为存在闰年跟平年两种情况,所以我们要进行不同的处理;
闰年的判断条件为年份是 4 的倍数,且不是 100 的倍数,为普通闰年。年份是整百数,且是400的倍数为世纪闰年。
利用一个判断对闰年计算为 366 天,平年为 355 天;
2.2.3
对 week 里面累加的数进行跟 7 求余,求余出来的数如果满足被 7 整除且求余 100 为 99 ( 判断是否为世纪末 ),则输出这个年份并 break 整个循环;
三、代码分享
(1)Calendar日历法
import java.util.Calendar;
public class test3 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int years;
for ( years = 1999 ; ; years += 100 ){
calendar.set( Calendar.YEAR , years );
calendar.set( Calendar.MONTH , 11 );
calendar.set( Calendar.DAY_OF_MONTH , 31);
if ( calendar.get( Calendar.DAY_OF_WEEK ) == 1 )
{
System.out.println( years + "年");
break;
}
}
}
}
(2)暴力解题法
public class test3 {
public static void main(String[] args) {
int weeks = 5;
for( int years = 2000 ; ; years++ ){
if( years % 4 == 0 && years % 100 != 0 || years % 400 == 0 ){
weeks += 366 ;
}else {
weeks += 365 ;
}
weeks %= 7 ;
if ( weeks == 0 && years % 100 == 99 ){
System.out.println( years + "年" );
break;
}
}
}
}