蓝桥杯试题-黑色星期五

原题

资源限制

时间限制: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日

相关推荐

  • leetcode47-全排列II

    原题 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解法 思想 这道题…

    算法 2020年5月10日
    0100
  • leetcode841-钥匙和房间

    原题 有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上,对于每个房间 i 都有一…

    2019年12月13日
    0120
  • leetcode1-两数之和

    原题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能…

    算法 2019年12月20日
    090
  • leetcode1014-最佳观光组合

    原题 给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。 一对景点(i < j)组成的观光组合的得分为(A[i]…

    算法 2020年6月17日
    01950
  • leetcode11-盛最多水的容器

    原题 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i,…

    2020年2月27日
    0250
  • leetcode367-有效的完全平方数

    原题 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 说明: 不要使用任何内置的库函数,如  sqrt。 示例1: …

    算法 2020年1月5日
    0150
  • leetcode138-复制带随机指针的链表

    这道题和leetcode133-克隆图有异曲同工之妙。 原题 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。…

    2019年12月17日
    0330
  • leetcode106-从中序与后序遍历序列构造二叉树

    原题 根据一棵树的中序遍历与后序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postor…

    算法 2020年1月13日
    0380
  • leetcode1013-将数组分成和相等的三个部分

    原题 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] +…

    算法 2020年3月11日
    0560
  • leetcode636-函数的独占时间

    原题 给出一个非抢占单线程CPU的 n 个函数运行日志,找到函数的独占时间。 每个函数都有一个唯一的 Id,从 0 到 n-1,函数可能会递归调用或者被其他函数调用。 日志是具有以…

    算法 2020年2月2日
    0190

发表回复

登录后才能评论