第十届蓝桥杯 JavaA 星期一
标题:星期一
整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?
(不要告诉我你不知道今天是星期几)
注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字。
答案: 5217
法一:
思路:
查日历得:2000/12/31为周日,死算。
public class 结果填空2星期一 {
/**5217
* 1.求1901到2000年一共多少天 2.查日历得:2000/12/31为周日 3.星期二
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = 1901; i <= 2000; ++i)
sum += isLeapYear(i) ? 366 : 365;
// 总工天数36525
System.out.println(sum);
System.out.println(sum / 7.0);// 一共5217个星期
System.out.println(sum - 5217 * 7);// 零6天
}
// 判断闰年
public static boolean isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return true;
return false;
}
}
法二(最优):
思路:
利用Calendar,SimpaleDateFormat类,求得相差5217星期零6天,最后推出。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* 1.求1901到2000年一共多少天 2.查日历得:2000/12/31为周日 3.星期二
*
* @param args
*/
public class 结果填空2星期一2 {
static long day;
static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd E ");
public static void main(String[] args) {
Calendar c1 = new GregorianCalendar();
Calendar c2 = new GregorianCalendar();
c1.set(1901, 0, 1);
c2.set(2000, 11, 31);
day = ((c2.getTimeInMillis() - c1.getTimeInMillis()) / (1000 * 3600 * 24)) + 1;
System.out.println(day / 7 + " " + day % 7);
System.out.println(df.format(c2.getTime()));
}
}