题目内容:
母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。
输入格式:
年份
输出格式:
日期(5月的哪一天)
输入样例:
2014
输出样例:
11
我们都知道平年是365天,闰年是366天,一周是7天,而365%7=1,366%7=2,则年份增加一年(日期不变),则星期增加1(平年)或2(闰年)。
比如2020年7月23日是星期四,那2021年7月23就是星期五(星期四加一天)。(注意,2020虽然是闰年,但我们设定的日期超过了2月,不受2020年2月29日的影响)
同理,年份减少一年,星期减少1(平年)或2(闰年)。
相反,星期不变,年份增加一年,日期减少1(平年)或2天(闰年)。
年份减少一年,日期增加1(平年)或2天(闰年)。
所以要计算某年的哪一天是母亲节,我们只需要随便找一个年份的母亲节作为参照,依次累加或累减即可。(因为母亲节在5月超过2月,对于大于参照年的要从下一年开始计算,小于参照年的从参照年开始计算)。
以下为参考代码:
#include<stdio.h>
int main()
{
int a = 2014,day = 11, year; //先随便找一个参照点,此处把2014年的5月11日作为参照
scanf("%d", &year);
if (year > a) {
for (a=2015; a <= year; a++) //必须从15年开始循环,如果从14年开始,输入2015年会被循环2次,但15年只比14年多1年
{
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0) //闰年减2天,平年减1天
day -= 2;
else
day -= 1;
day <= 7 ? day += 7 : day; //既然是5月第2个星期天,日期至少得大于7
}
}
a = 2014; //将a重置为2014
if (year < a) {
for (; a >year; a--)
{
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
day += 2;
else
day += 1;
day > 14 ? day -= 7 : day; //第二个星期日的日期不能大于14
}
}
printf("%d\n", day);
return 0;
}