2020年蓝桥杯省赛(C/C++)B组 跑步训练题解

题目

这道题是日期记录题型;按照题目要求,记录同学从2000.1.1跑到2020.10.1期间跑步公里数;首先枚举法再这道题中不适用,因为要考虑星期数,年数以及每月天数,所以使用数组下标法记录比较合适;即使用一个数组 months[13]={......}来固定记录每月天数,为什么此处要使用13呢,主要是为了方便表示月数的下标,然后此处还有非常重要并且容易忽略的一点就是闰年的判断,很多小伙伴最后因为没有考虑闰年而错解该题。那么这道题该如何入手呢;

首先记录日期,可以使用for循环记录年份;此外,月份可以使用month来记录;天数要根据每个月的情况去定,所以此处使用一个循环和数组来表示,即day<=months[month]来表示,months就是程序开始时定义的数组;这样就可以准确去表示每月的天数;然后去判断奖励条件,即周一或月初加跑1公里,这该怎么判断呢,想到题目里说明的,2000.1.1为周六,一周7天,可以定义一个变量week来记录星期几;周一即为7的倍数+1,故通过week%7=1来判断,并且呢week初始值定义为6;这样更方便判断,还有一个条件为月初,可以在内部循环判断day是否=1得出;这两个条件为并列关系,符合任意一个都会奖励1公里;

下面就是详细代码,大家可以参考一下:

#include<stdio.h>
int main()
{
    int sum=0;//定义跑步路程
    int week=6;//定义跑步的星期数;
    int month,day;
    int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//为了方便记录月数,故为13;
    for(int i=2000;i<=2020;i++)
    {
        if((i%4==0&&i%100!=0)||(i%400==0))//判断闰年
        {
            months[2]=29;
        }
        else
        {
            months[2]=28;
        }
        for(month=1;month<=12;month++)
        {
            for(day=1;day<=months[month];day++)
            {
                sum++;//通常跑1公里;
                if((week-1)%7==0||day==1)
                {
                    sum++;//要是这一天为周一,多跑一公里
                }
                week++;//每天跑完后星期数+1
                if(i==2020&&month==10&&day==1)
                {
                    printf("%d",sum);//日期截止输出总公里数
                }
            }
            
        }

    }
}

希望能对大家有一些启示!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值