蓝桥杯2013年B组第一题Java实现

package com.pb.structureAndalgorithm.previousRealTopic.test2013A;


/*
    1999年12月31日是世界末日。当然该谣言已经不攻自破。
    还有人称今后的某个世纪末的12月31日,如果是星期一则会....
    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
    于是,“谣言制造商”又修改为星期日......
    1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
    请回答该年份(只写这个4位整数,不要写12月31等多余信息)
 */
public class Main {

    public static void main(String[] args) {
        predictTheFuture(1999, 5);
    }

    private static void predictTheFuture(int startYear, int startWeek){

        // 初始的年份
        int year = startYear;
        // 初始的星期
        int  week = startWeek;


        while (true){

            // 当周日就停止
            if (week == 7){
                break;
            }

            // 获取该年多少天
            int numDay = statisticsYearNumDay(year);
            // 一个星期7天, 所有取余7, 得到一个等于0或 大于0小于7的数
            int tempWeek = numDay % 7;

            // 循环这个余数, 循环结束就可得到 星期几
            for (int i = 0; i < tempWeek; i++) {
                // 星期大于7就置为1
                if (week > 7){
                    week = 1;
                }
                // 星期自增
                week ++;
            }
            // 年份自增
            year ++;
        }

        System.out.println(year);
    }

    // 区分闰年和平年每年天数
    private static int statisticsYearNumDay(int y){

        // 默认平年天数
        int dayNum = 366;

        if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)){
            // 修改为闰年天数
            dayNum = 365;
        }

        return dayNum;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值