问题
星期一
整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一
解题
一般解法
/**
* 星期一
* 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一
*
* 提示:
* 非整百的年份除以4,或者整百的年份除以400,若不能整除的,即为平年
*
* 判断1901年1月1日到2000年12月31的每一天是星期几,如果是星期一则统计的个数+1。
*/
public static void countMondayNumber(){
Calendar instance = Calendar.getInstance();
instance.set(1901, 0, 1);
System.out.println(instance.get(Calendar.DAY_OF_WEEK));
int allDays = 0;
for (int i = 1901; i <= 2000; i++){
// 非整百年能被4整除 或者 能被400整除 则为闰年
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){
allDays += 366;
}else{
allDays += 365;
}
}
// 1901-1-1 为周三
allDays -= 4;
// 接下来的第一天就是星期一
int countMonday = 1;
// 每次加一周
for (int i = 1; i <= allDays - 7; i += 7){
countMonday ++;
}
System.out.println(countMonday);
}
Calendar 解法二
public static void countMondayNumber2(){
Calendar instance = Calendar.getInstance();
instance.set(1901, 0, 1);
System.out.println(instance.get(Calendar.DAY_OF_WEEK));
int mondayCount = 0;
while (true){
// 不断增加一天
instance.add(Calendar.DAY_OF_YEAR, 1);
// 周一数量加一
if (instance.get(Calendar.DAY_OF_WEEK) == 1){
mondayCount++;
}
// 是否是 2000-12-31
boolean equalDate = instance.get(Calendar.YEAR) == 2000 && instance.get(Calendar.MONTH) == 11 && instance.get(Calendar.DAY_OF_MONTH) == 31;
if (equalDate){
break;
}
}
System.out.println(mondayCount);
}