蓝桥杯试题-黑色星期五

原题

资源限制

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

相关推荐

  • leetcode739-每日温度

    原题 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 te…

    算法 2019年12月11日
    0130
  • leetcode18-四数之和

    原题 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 ta…

    算法 2020年5月5日
    0120
  • leetcode95-不同的二叉搜索树II

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

    算法 2020年1月22日
    0710
  • leetcode162-寻找峰值

    原题 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况…

    算法 2020年1月3日
    060
  • leetcode912-排序数组

    原题 给定一个整数数组 nums,将该数组升序排列。 示例 1: 输入: [5,2,3,1] 输出: [1,2,3,5] 示例 2: 输入: [5,1,1,2,0,0] 输出: […

    算法 2020年3月31日
    0440
  • leetcode914-卡牌分组

    原题 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。…

    算法 2020年3月27日
    0100
  • leetcode530-二叉搜索树的最小绝对差

    原题 给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。 示例: 输入:    1    &n…

    算法 2020年2月22日
    01330
  • 剑指offer46-把数字翻译成字符串

    原题 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编…

    算法 2020年2月29日
    0300
  • leetcode134-加油站

    原题 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[…

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

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

    算法 2020年3月6日
    060

发表回复

登录后才能评论