飘飞的焰火 2021-08-29 12:40 采纳率: 50%
浏览 18
已结题

2021计算机大厂面试题解析之Brother数数月份问题

img


package cn.xaut;


import java.util.Scanner;

public class T_two {
    public static void main(String[] args) {
        //星期 1,2,3,4,5,6,7分别代表周几
        int weekNumber[]={1,2,3,4,5,6,7};
        //通过提示得知202111日是星期五。那可以推出输入的开始年份的一月一日是星期几
        Scanner sc = new Scanner(System.in);
        int start = sc.nextInt();
        int end=sc.nextInt();
        //输入的开始年份和2021相差的年数
        int yearNum = Math.abs(start - 2021);
        //通过遍历计算2021与开始的年数中有几个闰年,从而计算出开始年份与2021一共相差多少天,在拿这个数对七求余数
        int countBigyear=0;
        if(start>=2021){
            for (int i=2021;i<start;i++){
                if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){//是闰年
                    countBigyear++;
                }
            }
        }else{
            for (int i=start;i<2021;i++){
                if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){//是闰年
                    countBigyear++;
                }
            }
        }
        int smallYear=yearNum-countBigyear;
        int sumDay=smallYear*365+366*countBigyear;
        //System.out.println("相差"+sumDay+"天");
        //相差几天
        int weekday= sumDay%7;
        int startWeekNum=0;
        if(start>2021){
            startWeekNum=(5+weekday)%7;
        }else{
            startWeekNum=Math.abs((5-weekday))%7;
        }
        //System.out.println(start+"年的1月1日是星期:"+startWeekNum);
        //星期指针
        int indexWeek=startWeekNum;
        //计数器
        int count=0;
        //默认end年份的一月一日不是星期1
        boolean lastFirstMonth=false;
        //%7  [0,1,2,3,4,5,6]0为星期一
        indexWeek=indexWeek-1;
        for(int i=start; i<=end; i++){
            //判断21日是否为星期1
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的2月1日是星期"+(indexWeek+1));
            //判断31if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){//是闰年
                indexWeek=(((29%7)+indexWeek))%7;
                if(indexWeek==0){
                    count++;
                }
                System.out.println(i+"润年的3月1日是星期"+(indexWeek+1));
            }else{//非闰年
                indexWeek=(((28%7)+indexWeek))%7;
                if(indexWeek==0){
                    count++;
                }
                System.out.println(i+"非润年的3月1日是星期"+(indexWeek+1));
            }
            //判断41日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的4月1日是星期"+(indexWeek+1));
            //判断51日
            indexWeek=(((30%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的5月1日是星期"+(indexWeek+1));
            //判断61日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的6月1日是星期"+(indexWeek+1));
            //判断七月1日
            indexWeek=(((30%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的7月1日是星期"+(indexWeek+1));
            //判断八月1日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的8月1日是星期"+(indexWeek+1));
            //判断九月1日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的9月1日是星期"+(indexWeek+1));
            //判断十月1日
            indexWeek=(((30%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的10月1日是星期"+(indexWeek+1));
            //判断十一月1日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的11月1日是星期"+(indexWeek+1));
            //判断十二月1日
            indexWeek=(((30%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
            }
            System.out.println(i+"年的12月1日是星期"+(indexWeek+1));
            //判断下一年的11日
            indexWeek=(((31%7)+indexWeek))%7;
            if(indexWeek==0){
                count++;
                lastFirstMonth=true;
            }else{
                lastFirstMonth=false;
            }
            System.out.println((i+1)+"年的1月1日是星期"+(indexWeek+1));
        }
        if(lastFirstMonth){
            count=count-1;
        }
        System.out.println(count);
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月6日
    • 创建了问题 8月29日

    悬赏问题

    • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
    • ¥50 vue组件中无法正确接收并处理axios请求
    • ¥15 隐藏系统界面pdf的打印、下载按钮
    • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
    • ¥15 基于pso参数优化的LightGBM分类模型
    • ¥15 安装Paddleocr时报错无法解决
    • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
    • ¥50 分布式追踪trace异常问题
    • ¥15 人在外地出差,速帮一点点
    • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改