ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

蓝桥杯 黑色星期五(Java)

2021-03-21 16:00:18  阅读:221  来源: 互联网

标签:case count 13 Java int 1998 蓝桥 星期五 whichDay


1.题目

有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是"诸事不宜”。
请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:
(1) - -年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份; .
(2)已知1998年1月1 日是星期四,用户输入的年份肯定大于或等于1998年。
输入格式:输入只有一-行,即某个特定的年份(大于或等于1998年)。
输出格式:输出只有一-行,即在这一年中,出现了多少次既是13号又是星期五的情形。
输入输出样例
样例输入1998
样例输出3

2.思路

看着还是挺简单的,只需要从1998年1月1日星期四往后面循环找就行了,当输入的年份大于1998,从1998年循环到目标年就行了。主要采用swith。采用一个计数器来记录一年中有多少个13号是星期五,每一年记得清零,还有一个记录星期几的变量,是不断变化的,记住,当年变化的时候不能重置这个变量。

3.代码

import java.util.Scanner;

public class T3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int goalYear = sc.nextInt();
		int res = solution(goalYear);
		System.out.println(res);
	}
	/**
	 * @param goalYear 传入的年数
	 * @return 那一年有几天的13号恰好是星期五
	 */
	public static int solution(int goalYear) {
		// 5.最后需要用个循环,不是每年的1月1日都是星期四
		int whichDay = 3;
		int count = 0;
		// 已知1998年1月1 日是星期四
		// 忘了每一年都要去判断是不是闰年,必须要写进循环里边
		for (int xunhuan = 0; xunhuan <= goalYear - 1998; ++xunhuan) {
			// 1.判断是不是闰年
			boolean isRunNian = false;
			if (((xunhuan + 1998) % 100 == 0 && (xunhuan + 1998) % 400 == 0)
					|| ((xunhuan + 1998) % 4 == 0 && (xunhuan + 1998) % 100 != 0)) {
				// 是闰年
				isRunNian = true;
			}
			count = 0;// 记录既是13号又是星期五的天数
			// 要知道前一年的12月31号是星期几
			// 2.先模拟循环十二个月
			for (int i = 1; i <= 12; ++i) {
				// 3.再用swith 语句,先用循环模拟每个月份
				switch (i) {
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12: {// 每月有31天
					// 4.具体的确定是星期几了
					for (int j = 1; j <= 31; ++j) {
						whichDay += 1;
						if (whichDay == 8) {
							whichDay = 1;
						}
						if (j == 13 && whichDay == 5) {
							count += 1;
						}
					}

				}
					break;
				case 4:
				case 6:
				case 9:
				case 11: {
					for (int j = 1; j <= 30; ++j) {
						whichDay += 1;
						if (whichDay == 8) {
							whichDay = 1;
						}
						if (j == 13 && whichDay == 5) {
							count += 1;
						}
					}
				}
					break;
				case 2: {
					if (isRunNian) {
						for (int j = 1; j <= 29; ++j) {
							whichDay += 1;
							if (whichDay == 8) {
								whichDay = 1;
							}
							if (j == 13 && whichDay == 5) {
								count += 1;
							}

						}
					} else if (!isRunNian) {
						for (int j = 1; j <= 28; ++j) {
							whichDay += 1;
							if (whichDay == 8) {
								whichDay = 1;
							}
							if (j == 13 && whichDay == 5) {
								count += 1;
							}
						}
					}
				}
					break;
				default:
					throw new IllegalArgumentException("Unexpected value: " + i);
				}
			}
		}
		return count;
	}
}

4.我的问题:由于闰年判断没有写进循环,导致花费大量时间调试找错,每一年都需要判断是不是闰年,做的时候把这一点忽略了

标签:case,count,13,Java,int,1998,蓝桥,星期五,whichDay
来源: https://blog.csdn.net/balder_girl/article/details/115050089

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有