算法: 黑色星期五

解析: 题目给了一个很有用的信息"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;
	}

}

原文地址:https://www.cnblogs.com/lyd447113735/p/12708885.html