问题描述
已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
输入只有一行
YYYY MM DD
输出格式
输出只有一行
W
数据规模和约定
1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5
已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
输入只有一行
YYYY MM DD
输出格式
输出只有一行
W
数据规模和约定
1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5
150794天
#include <cstdio>
#include <algorithm>
#include <cmath>
int y,m,d,sum;
bool f;
int mo[]={0,31,0,31,30,31,30,31,31,30,31,30,31};
bool is(int x) {
if ((x%4==0 && x%100!=0) || (x%400==0)) return true;
return false;
}
int main()
{
while (~scanf ("%d%d%d",&y,&m,&d)) {
sum=0;
if (y>1599) {
for (int i=1599;i<y;i++) {
f=is(i);
if (f==true) sum+=366;
else sum+=365;
}
}
f=is(y);
if (f==true) mo[2]=29;
else mo[2]=28;
if (m>1) {
for (int i=1;i<m;i++)
sum+=mo[i];
}
sum+=d-1;
sum-=150794;
if (sum>=0) printf ("%d\n",(sum+4)%7+1);
else {
sum%=7;
if (sum==-5) sum=6;
else if (sum==-6) sum=5;
else sum+=4;
printf ("%d\n",sum+1);
}
}
return 0;
}