每年5月份的第二个星期日定为母亲节。那有可能每年都是不同的日子,作为程序员的你能不能计算一下y年的母亲节是哪一天吗?(1900~2100)
提示:1900年母亲节是5月13日
输入格式:
每组数据只输入一个正整数表示年。
输出格式:
对应每组输入输出该年的母亲节为哪一天。
输入样例:
2020
2021
输出样例:
5 10
5 9
代码样例:
#include<stdio.h>
int main()
{
int year;
while( scanf("%d", &year) != EOF ){
//输入年份
int count=0, day=0, res=0;
//定义(每次循环开始时清零)
for(int i=1900; i<=year; i++)
if((i%4==0&&i%100!=0)||i%400==0) count += 1;
//判断闰年(并记录从1900年到当年经历过的闰年年数)方法见注释1
day = ((( year-count-1899 )*365 + count*366 ) -31-30-31-31-30-31-30-31 ) %7;
//计算当年五月一日是周几(用总年份减去五月及五月后的天数)详见注释2
res = 14-day;
//周一对应14号,周二对应十三号 详见注释3
printf("5 %d\n", res);//输出
}
}
无注释纯净版
#include<stdio.h>
int main()
{
int year;
while( scanf("%d", &year) != EOF )
{
int count=0, day=0;
for(int i=1900; i<=year; i++)
if((i%4==0&&i%100!=0)||i%400==0) count += 1;
day = ((( year-count-1899 )*365 + count*366 ) -245 ) %7;
printf("5 %d\n", 14-day);
}
}
注释:
- 判断闰年
能被400整除 或 能被4整除,并且不能被100整除 的年份是闰年。
( i%4==0&&i%100!=0 ) || i%400==0
- 判断第五月第一天是周几
已知1900年五月第一天为周一,将自1900年一月一日起总天数除以7求余数,可得day=0对应为周一,day=1对应为周二 以此类推… - 最终日期
找规律可知母亲节日期的范围在5月8日-5月14日的某一天中
if( 5月1日是星期 1 ) 母亲节是5月14日 //间隔13天
else if( 5月1日是星期 2 ) 母亲节是5月13日 //间隔12天
else if( 5月1日是星期 3 ) 母亲节是5月12日 //间隔11天
else if( 5月1日是星期 4 ) 母亲节是5月11日 //间隔10天
else if( 5月1日是星期 5 ) 母亲节是5月10日 //间隔 9天
else if( 5月1日是星期 6 ) 母亲节是5月 9日 //间隔 8天
else if( 5月1日是星期 7 ) 母亲节是5月 8日 //间隔 7天
找规律可简化为 14-day 。
如有错误请指出 谢谢
转载:https://blog.csdn.net/weixin_54963348/article/details/113325356
查看评论