第十一届蓝桥杯C/C++ B组D题跑步锻炼(C、Java、Python实现)

在这里插入图片描述
思路:此类有关月份的题目可以把月份存在一个数组(列表)里,再用判断是否为闰年就可解决该月天数的问题。然后再标记下几号和周几即可得出答案。(最后补充了暴力求解)

C:

#include<iostream.h>

void main()
{
	 int sum=0, week = 6;//sum:公里数  week:当天为周几,起初2000.1.1为周六
     //从2000到2020
	 for (int year = 2000; year <= 2020; year++)
		{
			int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//数组为每个月份的天数
			if(year%4==0)//2000->2020中的闰年,使闰年2月份天数为29天
				d[2] = 29;
            for (int month = 1; month <= 12; month++)//循环月份
                for (int day = 1; day <= d[month]; day++,week++) //循环天数,再使week++
				{
                     if(week==8)//若week为8,则重回周一
						 week=1;                     
					 if(day==1 || week==1)//当天为周一或一号时,跑两公里
                         sum+=2;
					 else				//当天不为周一或一号时,跑一公里
                         sum+=1;
                     if(year==2020 && month==10 && day==1)//2020.10.1输出公里数
						cout<<sum<<endl;
                 }
         }
}

Java:

public class GroupC_D11 {
     public static void main(String[]args){
         int sum = 0;   //公里数
         int week = 6;  //当天为周几,起初2000.1.1为周六
         for (int year = 2000; year <= 2020; year++) {  //从2000到2020
             int []d = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //数组为每个月份的天数
             if(year%4==0){ //2000->2020中的闰年
                 d[2] = 29; //使闰年2月份天数为29天
             }
             for (int month = 1; month <= 12; month++) {//循环月份
                 for (int day = 1; day <= d[month]; day++,week++) { //循环天数,再使week++
                     if (week==8){  //若week为8,则重回周一
                         week=1;
                     }
                     if(day==1 | week==1){  //当天为周一或一号时,跑两公里
                         sum+=2;
                     }else{                 //当天不为周一或一号时,跑一公里
                         sum+=1;
                     }
                     if(year==2020 & month==10 & day==1){//2020.10.1输出公里数
                         System.out.println(sum);
                     }
                 }
             }
         }
     }
}

python:

week = 6    #公里数
sum = 0     #当天为周几,起初2000.1.1为周六
for year in range(2000,2021):   #从2000到2020
    d = [0,31,28,31,30,31,30,31,31,30,31,30,31]     #列表为每个月份的天数
    if year%4 == 0: #2000->2020中的闰年,使闰年2月份天数为29天
        d[2] = 29
    for month in range(1,13):   #循环月份
        for day in range(1,d[month]+1): #循环天数
            if week == 8:   #若week为8,则重回周一
                week = 1
            if day == 1 or week == 1:   #当天为周一或一号时,跑两公里
                sum = sum + 2
            else:       #当天不为周一或一号时,跑一公里
                sum = sum + 1
            week = week + 1
            if year == 2020 and month == 10 and day == 1:   #2020.10.1输出公里数
                print(sum)

答案:8879


用Java写了个暴力求解,其他语言类似

public class BaoLi {
     public static void main(String[]args){
         int sum = 0;//公里数
         int week = 6;//当天为周几,起初2000.1.1为周六
         int day = 0;
         for (int year = 2000;year <= 2020;year++){
             if (year%4==0){//闰年
                 for (int month = 1;month <= 12;month++){
                    if (month==2){//day为该月份的天数
                        day = 29;
                    }else if (month==4|month==6|month==9|month==11){
                        day = 30;
                    }else {
                        day = 31;
                    }
                    for (int date = 1;date <= day;date++,week++){
                        if (week==8){
                            week = 1;
                        }
                        if (date==1|week==1){
                            sum += 2;
                        }else {
                            sum += 1;
                        }
                        if (year==2020&month==10&date==1){
                            System.out.println(sum);
                        }
                    }
                 }
             }else{//直接把上面的复制粘贴,把2月份的day改为28
                 for (int month = 1;month <= 12;month++){
                     if (month==2){
                         day = 28;
                     }else if (month==4|month==6|month==9|month==11){
                         day = 30;
                     }else {
                         day = 31;
                     }
                     for (int date = 1;date <= day;date++,week++){
                         if (week==8){
                             week = 1;
                         }
                         if (date==1|week==1){
                             sum += 2;
                         }else {
                             sum += 1;
                         }
                     }
                 }
             }
         }
     }
}

  • 57
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值