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

    曾有邪教称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;  
	            }  
	        }  
	    }  
}  


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