在对时间的内容求解的过程中,我们还会遇到一种情况,就是让求特定日期的时间,比如
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 11 月 11 日周六(含)到 2020 年 10月 1日周四(含)。请问这段时间小蓝总共跑步多少千米?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
针对这个题,我们可以将它转化为求特殊的日期值,即求周一和月初
#include<stdio.h>
int main()
{
int year,moth,day,sum=0,week=6;//定义变量分别表示年,月,日,星期
int moths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for(year=2000;year<=2020;year++)
{
if(year%4==0&&year%100!=0||year%400==0)
{
moths[2]=29;
}
else
{
moths[2]=28;
}
for(moth=1;moth<=12;moth++)
{
for(day=1;day<=moths[moth];day++)
{
if(day==1||week%7==1)//week%7==1,表示当天是星期一,
{
sum=sum+2;
}
else
{
sum=sum+1;
}
week++;
if(year==2020&&moth==10&&day==1) //到2022年10月1日输出
{
printf("%d",sum);
}
}
}
}
return 0;
}
我们在求时间的问题还会遇到一种情况,就是
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
今年的植树节(2012年 3 月 12 日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”
“把我出生的年月日连起来拼成一个 8位数(月、日不足两位前补 0)正好可以被今天的年、月、日整除!”
他想了想,又补充到:“再给个提示,我是 6月出生的。”
根据这些信息,请你帮小明算一下,他叔叔的出生年月日。
格式是年月日连成的 8位数。例如,如果是 1948 年 6 月 12 日,就写:19480612。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
这题中的日期要求是连在一起,并不是分开的,其实道理都差不多
//此题给出了限制条件6月,即无闰年的问题
#include<stdio.h>
int main()
{
int year,day,sum=0;
for(year=1900;year<=2012;year++)
{
for(day=1;day<=30;day++)
{
sum=year*10000+600+day;
if(sum%2012==0&&sum%3==0&&sum%12==0) //终止条件
{
printf("%d\n",sum);
}
}
}
return 0;
}
总结
在面对蓝桥杯的时间问题的时候,
1.我们首先要考虑闰年问题
2.对时间进行拆分,年,月,日,星期 ,分别求,利用for循环
3.要求个个位的和采用求和算法
以上就针对蓝桥杯时间问题的三板斧,希望对大家有所帮助。
祝大家都能在蓝桥杯中取得好成绩。