算法: 黑色星期五
![](https://img2020.cnblogs.com/blog/1151930/202004/1151930-20200415220119222-1022002218.jpg)
解析: 题目给了一个很有用的信息"1998年1月1日是星期四",我们可以根据这个信息为依据判断当前是星期几。另外需要自定义两个方法,一个方法对闰年和平年的判断,一个方法返回不同年份每个月的天数。
package _4_9_test;
import java.time.MonthDay;
import java.util.Scanner;
/*黑色星期五
* 星期从1998年1月1号星期四开始,每七天循环一次,首先求出当前年份的1月1号是星期几
* 号数从每年的1月1号开始计数,达到了当前月份天数后回到1
*
* */
public class EightyFour {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
// 统计黑色星期五出现的次数
int count = 0;
// 存储年份
int iniYear = 1998;
// 存储星期
int week = 4;
// 存储每个月的天数
int monthNum;
// 从1998年开始
while (iniYear <= year) {
for (int i = 1; i <= 12; i++) {
// 储存当天的号数
int monthDay = 1;
// 得到当前月份的天数
monthNum = monthNum(iniYear, i);
for (int j = 1; j <= monthNum; j++) {
week++;
monthDay++;
// 对星期进行判断
if (week > 7) {
week = 1;
}
// 对当前多少号进行判断
if (monthDay > monthNum) {
monthDay = 1;
}
// 如果当前是输入的年份且是13号和星期五,count加1
if (iniYear == year && week == 5 && monthDay == 13) {
count++;
}
}
}
iniYear++;
}
System.out.println(count);
}
// 自定义判断闰年的方法
public static boolean judge(int year) {
boolean flag = false;
if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
flag = true;
}
return flag;
}
// 根据年份,返回当前月份的天数
public static int monthNum(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
// 如果是闰年,二月份有29天,平年二月份有28天
if (judge(year)) {
return 29;
} else {
return 28;
}
}
return 0;
}
}