计算某年母亲节是哪一天

母亲节


题目描述:

每年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

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);
	}
}

注释:

  1. 判断闰年
    能被400整除 或 能被4整除,并且不能被100整除 的年份是闰年。
( i%4==0&&i%100!=0 ) || i%400==0
  1. 判断第五月第一天是周几
    已知1900年五月第一天为周一,将自1900年一月一日起总天数除以7求余数,可得day=0对应为周一,day=1对应为周二 以此类推…
  2. 最终日期
    找规律可知母亲节日期的范围在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 。

如有错误请指出 谢谢

你可能感兴趣的:(c语言)