蓝桥杯:跑步锻炼

填空题,有两种解法,一种是直接计算有多少天,然后通过天数循环判断周一的数量,之后看日历找到是周一同时又是月初的,直接21*12-2-是周一同时又是月初的数量即可:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        /*
          填空题,直接计算答案即可
          首先一共多少天,这样先计算出每天跑的,再算周一和月初的
          21*365-31-30-30+6(2020年只要10月1日的),然后再算闰年的00,04,08,12,16,20都是闰年,所以要+6
          这里每天跑步的数量是7580
        */
        //20001月1日是周六
        int day = 6;
        //一共只有7580天,所以遍历一次下来,同时得到周一数量
        int number = 0;
        //记录月初(不包含初一)
        int month = 0;
        for(int i = 0;i<7580;i++){
            //判断当前是星期几
            day = day%7;
            //如果day==1,那么就代表是周一;
            if(day==1){
              number++;
            }
            //今天过完了,所以星期数就自增
            day++;
        }
        //月初一共21*12-2,那么就算250天:(-2是因为2020年只到10月份)
        //直接看日历,月初和周一在同一天的一共有34天(我觉得直接看日历比在循环里面判断月初好一点)
        //那么结果就是
        System.out.println(7580+number+250-34);
    }
}

 另一种是直接用for搞定:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
      int sum = 0;
      int week = 6;
      //年份
      for(int year = 2000 ;year<2021;year++){
        //正常年份
        int array[] = {31,28,31,30,31,30,31,31,30,31,30,31};
        //修改闰年的二月份
        if( (year%4==0)&&(year%100!=0) || (year%400==0) ){
          array[1] = 29;
        }

        //不是2020年的循环判断,2020年要单独拿出来做循环
        if(year!=2020){
          //月份
          for(int month = 1;month<13;month++){
            //天数
              for(int i = 0;i<array[month-1];i++){
                //先判断当天是否为第一天,如果为该月的第一天且不为周一,那么就多跑1千米{
                if(i==0&&(week%7!=1)){
                  sum++;
                }
                week = week%7;
                if(week==1){
                 //如果是周一,就要多跑1千米
                 sum++;
                }
                week++;
                //每一天都要跑1千米
                sum++;
              }
          }
        }else{
          //月份
          for(int month = 1;month<11;month++){
            //如果不是十月份,就正常按照上面进行循环
            if(month!=10){
                for(int i = 0;i<array[month-1];i++){
                //先判断当天是否为第一天,如果为该月的第一天且不为周一,那么就多跑1千米{
                if(i==0&&(week%7!=1)){
                  sum++;
                }
                week = week%7;
                if(week==1){
                 //如果是周一,就要多跑1千米
                 sum++;
                }
                week++;
                //每一天都要跑1千米
                sum++;
              }
            }else{
                //如果是十月份,那么这天肯定不是周一,但是是月初,所以要+2;
                sum+=2;
            }
          }
        }
      }
      System.out.println(sum);
    }
}

结果是:

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值