已知 1 1 1 年 1 1 1 月 1 1 1 日是星期一。
现在给定一个日期,请你判断是星期几。
注意闰年的 2 2 2 月有 29 29 29 天。
满足下面条件之一的是闰年:
年份是 4 4 4 的整数倍,而且不是 100 100 100 的整数倍;
年份是 400 400 400 的整数倍。
输入格式
输入包含多组测试数据。
每组数据占一行,包含一个整数 d
表示日,一个字符串 m
表示月,一个整数 y
表示年。
月份 1 ∼ 12 1∼12 1∼12,依次如下所示:
January, February, March, April, May, June, July, August, September, October, November, December
输出格式
每组数据输出一行结果,输出一个字符串表示给定日期是星期几。
周一至周日依次如下所示:
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
数据范围
1000 ≤ y ≤ 3000 , 1000≤y≤3000, 1000≤y≤3000,
给定日期保证合法。
每个输入最多包含 100 100 100 组数据。
输入样例:
9 October 2001
14 October 2001
输出样例:
Tuesday
Sunday
#include
using namespace std;
const int N = 20;
string s;
int d, m, y;
char month[][15] = {"", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December"};
char zd[][15] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int get(int y, int m){
int res = 0;
res += days[m];
if(m == 2 && (y % 4 == 0 && y % 100 != 0 || y % 400 == 0))
res ++;
return res;
}
int main(){
while(cin >> d >> s >> y){
for(int i = 1; i <= 12; i++)
if(s == month[i]) m = i;
int sum = 0;
for(int i = 1; i < y; i++){
sum += 365;
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) sum++;
}
sum += d;
for(int i = 1; i < m; i++) sum += get(y, i);
sum --;
cout << zd[sum % 7] << endl;
}
return 0;
}