题目:
这道题是日期记录题型;按照题目要求,记录同学从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);//日期截止输出总公里数
}
}
}
}
}
希望能对大家有一些启示!!!