第四届蓝桥杯JAVA本科B(世纪末的星期)

 

运气有点好,小题对没两道,还好大题4道会三道。幸福有点太突然的拿到一等奖。

比赛的时候不会做,好囧~~(把闰年的计算方法给忘记了,加上对日期的API真心不熟悉)

 

package com.zcb;

import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * 
 * @author zhengchubin
 *
 */
/*  世纪末的星期 
    曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 
    还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 
    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!  
   于是,“谣言制造商”又修改为星期日...... 
    1999年的12月31日是星期五, 
   请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)? 
请回答该年份(只写这个4位整数,不要写12月31等多余信息) 
 */ 
public class EndDay
{
	public static void main(String[] args)
	{	
		//第一种方法
		int day = -1;
		for(int i=2099;i<5000;){
			Calendar calendar = new GregorianCalendar(i,11,31);
			day = calendar.get(Calendar.DAY_OF_WEEK);
			if(day==1)
				System.out.println(i);
			i=i+100;
		}
		//第二种方法
		int days = 5;//  1999年的最后一天为周5,把下一年加上5天正好是周日 
		int i=2000;   //  所以在2000年的天数上加5天,正好可被7整除的年的最后一天是周日 
		for(;;){
			if(i%4==0&&i%100!=0||i%400==0){ // 平年365天  闰年366天 
				days=days%7+366;  // 把每一年对7取余的天数+下一年的天数
			}else{
				days=days%7+365;
			}
			if(days%7==0&&(i+"").endsWith("99")){
				System.out.println(i);
				break;
			}
			i++;
		}
	}
}


 

 

你可能感兴趣的:(算法)