蓝桥杯试题-黑色星期五

原题

资源限制

时间限制:1.0s 内存限制:512.0MB


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


样例输入

1998


样例输出

3

解法

思想

可以偷懒使用Calendar类或者被废弃的Date,不过要求对Calendar类比较熟悉。。

不然就按闰年的情况去处理日期吧。。

代码

java api:

import java.util.Calendar;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();
        int count = 0;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR,year);
        for(int i = 0;i<12;i++){
            calendar.set(Calendar.MONTH,i);
            calendar.set(Calendar.DATE,13);
            if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.FRIDAY) count ++;
        }
        System.out.println(count);
    }
}

硬算:

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();
        int firstDay = getFirstDay(year);
        boolean isLeap = (year%4==0&&year%100!=0)||(year%100==0&&year%400==0);
        int count = 0;
        for(int i = 1;i<=12;i++){
            switch (i){
                case 1:
                    firstDay = (firstDay+12%7)%7;
                    if(firstDay == 4) count++;
                    break;
                case 3:
                    firstDay = (firstDay+(isLeap?29:28)%7)%7;
                    if(firstDay == 4) count++;
                    break;
                case 5:
                case 7:
                case 10:
                case 12:
                    firstDay = (firstDay+30%7)%7;
                    if(firstDay == 4) count++;
                    break;
                default:
                    firstDay = (firstDay+31%7)%7;
                    if(firstDay == 4) count++;
                    break;
            }
        }
        System.out.println(count);
    }

    public static int getFirstDay(int year){
        if(year == 1998) return 3;
        int lastYear = year -1;
        if((lastYear%4==0&&lastYear%100!=0)||(lastYear%100==0&&lastYear%400==0)) return (getFirstDay(lastYear)+366%7)%7;
        else return (getFirstDay(lastYear)+365%7)%7;
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/%e8%93%9d%e6%a1%a5%e6%9d%af%e8%af%95%e9%a2%98-%e9%bb%91%e8%89%b2%e6%98%9f%e6%9c%9f%e4%ba%94/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年2月28日 10:51
下一篇 2020年2月29日

相关推荐

  • 程序员面试金典08.11-硬币

    原题(来源Leetcode) 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示…

    算法 2020年4月23日
    0160
  • 剑指offer59-队列的最大值

    原题(来源Leetcode) 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度…

    算法 2020年3月7日
    0130
  • leetcode331-验证二叉树的前序序列化

    原题 序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_ / \ 3 2…

    算法 2020年1月26日
    080
  • leetcode95-不同的二叉搜索树II

    原题 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: [   [1,null,3,2],  &n…

    算法 2020年1月22日
    0700
  • leetcode779-第K个语法符号

    原题 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始) 例子: 输入: N…

    算法 2020年1月22日
    0100
  • leetcode125-验证回文串

    原题 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明: 本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a …

    算法 2020年5月21日
    0100
  • leetcode498-对角线遍历

    这是一个Z字形编排问题,JEPG的编码过程中也会用到。 原题 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下…

    2019年11月14日
    0110
  • leetcode21-合并两个有序链表

    原题 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1->2->4, 1->3->4 输出: 1->1->2->3-…

    2019年12月17日
    0100
  • leetcode33-搜索旋转排序数组

    原题 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,…

    算法 2020年1月1日
    0150
  • leetcode69-x的平方根

    原题 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例1: 输入:…

    算法 2019年12月30日
    040

发表回复

登录后才能评论