蓝桥杯试题-黑色星期五

原题

资源限制

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

相关推荐

  • 一致性哈希算法的介绍

    本文参考资源: 一致性Hash算法详解 - 知乎 一致性哈希算法概述 分布式系统中,常常听到一种算法叫一致性哈希算法,而最常用的领域相信大家也有所耳闻——负载均衡。负载均衡有许多算…

    2020年4月4日
    0100
  • leetcode36-有效的数独

    原题 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-…

    2019年12月26日
    090
  • leetcode38-外观数列

    原题 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作…

    算法 2020年4月30日
    0290
  • leetcode238-除自身以外数组的乘积

    原题 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积…

    算法 2020年6月4日
    080
  • leetcode35-搜索插入位置

    原题 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: […

    算法 2020年3月2日
    0120
  • leetcode191-位1的个数

    原题 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 1: 输入: 000000000000000000000000…

    算法 2020年4月15日
    0120
  • leetcode974-和可被K整除的子数组

    原题 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。 示例: 输入: A = [4,5,0,-2,-3,1], K = 5 输出: 7 解释: …

    算法 2020年5月27日
    0170
  • 程序员面试金典01.06-字符串压缩

    原题(来源Leetcode) 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字…

    算法 2020年3月16日
    0230
  • 剑指offer57-和为s的连续正数序列

    原题(来源Leetcode) 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到…

    算法 2020年3月6日
    050
  • leetcode103-二叉树的锯齿形层次遍历

    原题 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如:给定二叉树: [3,9,20,null,nul…

    算法 2020年1月25日
    060

发表回复

登录后才能评论