跑步锻炼(三种解法)-蓝桥杯

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。

小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

解法01

    public static void main(String[] args) {
        int year=2000;
        int[] a1={31,28,31,30,31,30,31,31,30,31,30,31};
        int[] a2={31,29,31,30,31,30,31,31,30,31,30,31};
        int[] a3={31,29,31,30,31,30,31,31,30};
        int rount=0;
        int week=5;
        while(year<2020){
            if((year%4==0&&year%100!=0)||year%400==0){
                for (int monthDays : a2) {
                    for (int day = 1; day <= monthDays; day++) {
                        rount++;
                        week++;
                        week=week==8?1:week;
                        if(week==1||day==1){
                            rount++;
                        }
                    }
                }
            }else{
                for (int monthDays : a1) {
                    for (int day = 1; day <= monthDays; day++) {
                        rount++;
                        week++;
                        week=week==8?1:week;
                        if(week==1||day==1){
                            rount++;
                        }
                    }
                }
            }
            year++;
        }
        for (int monthDays : a3) {
            for (int day = 1; day <= monthDays; day++) {
                rount++;
                week++;
                week=week==8?1:week;
                if(week==1||day==1){
                    rount++;
                }
            }
        }
        System.out.println(rount+2);
    }

解法02

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int[] a1={31,28,31,30,31,30,31,31,30,31,30,31};
        int[] a2={31,29,31,30,31,30,31,31,30,31,30,31};
        int[] a3={31,29,31,30,31,30,31,31,30};
        int rount=0;
        int week=5;
        int count=0;
        //1号
        int day01=21*12-2;
        //普通天数
        for (int year = 2000; year <= 2020; year++) {
            if((year%4==0&&year%100!=0)||(year%400==0)){
                rount+=366;
            }else{
                rount+=365;
            }
        }
        rount=rount-31-30-31+1;
        //周一(不含1号)
        for (int year = 2000; year < 2020; year++) {
            if((year%4==0&&year%100!=0)||year%400==0){
                for (int month : a2) {
                    for (int day = 1; day <= month; day++) {
                        week++;
                        if(week==8){
                            week=1;
                            if(day!=1){
                                count++;
                            }
                        }
                    }
                }
            }else{
                for (int month : a1) {
                    for (int day = 1; day <= month; day++) {
                        week++;
                        if(week==8){
                            week=1;
                            if(day!=1){
                                count++;
                            }
                        }
                    }
                }
            }
​
        }
        for (int month : a3) {
            for (int day = 1; day <= month; day++) {
                week++;
                if(week==8){
                    week=1;
                    if(day!=1){
                        count++;
                    }
                }
            }
        }
        int result=day01+rount+count;
​
​
        System.out.println(result);
​
​
        scan.close();
    }

解法03

    public static void main(String[] args) {
        int[] months={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int year=2000;
        int month=1;
        int day=1;
        int week=6;
        int rount=2;
        while(true){
            System.out.println("OK");
            if((year%4==0&&year%100!=0)||year%400==0){
                months[2]=29;
            }
            else{
                months[2]=28;
            }
            day++;
            week++;
            rount++;
            if(day>months[month]){
                day=1;
                month++;
            }
            if(month==13){
                month=1;
                year++;
            }
            if(week==8){
                week=1;
            }
            if(day==1||week==1){
                rount++;
            }
            if(year==2020&&month==10&&day==1){
                break;
            }
        }
        System.out.println(rount);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值