题目描述
今天是2007年11月17日,星期六。现在如果我告诉你一个日期,你能告诉它是星期几吗?
输入
输入有多组测试数据,每个测试数据占一行。每行有3个整数,分别表示:年(0< year < 10000), 月(0 <= month < 13), 日(0 <= day < 32)。
输出
每个测试数据输出一行,如果输入数据不对,输出“illegal”,否则输出它是星期几。
样例输入 复制
2007 11 17
样例输出 复制
Saturday
#include<iostream>
#include<vector>
using namespace std;
int run(int n)
{
if(n%4!=0||(n%100==0&&n%400!=0)) return 0;
else return 1;
}
int main()
{
vector<string> a = {{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"},{"Sunday"}};
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y;int m;int d;
while(scanf("%d %d %d",&y,&m,&d)!=EOF)
{
//判断合不合法
if(y<=0||y>10000||m>12||m<=0||d<=0||d>=32)
printf("illegal");
//记录总天数
int sum = 365*(y-1);
//查闰年的
int count = 0;
//判断现在的年份是不是闰年
int flag = run(y);
//在这之前有多少个闰年
for(int i = 1;i<y;i++)
{
if(run(i)==1)
count++;
}
//说明是闰年
if(flag == 1)
{
for(int i =1;i<m;i++)
{
sum+=month[i];
}
if(m>2)
sum+=1;
}
//说明不是闰年
else
{
for(int i =1;i<m;i++)
{
sum+=month[i];
}
}
sum = sum+d+count-1;
cout<<a[(sum)%7]<<endl;
}
return 0;
}