母親節
題目描述:
每年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://www.uj5u.com/qita/254506.html
標籤:其他
