What day is it
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4878 Accepted Submission(s): 1431
Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?
Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
Sample Input
2007 11 17
Sample Output
Saturday
Author
LGX
Source
题解:其实公元元年1月1号是周一,然后模拟吧。
AC代码
:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<algorithm>
#include<time.h>
typedef long long LL;
using namespace std;
int f(int y)
{
return y%400==0||y%100!=0&&y%4==0;
}
int main()
{
int i,y,m,d;
int t[2][31]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
char date[8][30]={{"Sunday"},{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"}};
while(cin>>y>>m>>d)
{
if(!f(y)&&m==2&&d>28||y==0||m==0||d==0||d>t[f(y)][m]||m>12)
{
printf("illegal\n");
}
else
{
for(i=1;i<y;i++)
d+=365+f(i);
for(i=1;i<m;i++)
d+=t[f(y)][i];
d%=7;
printf("%s\n",date[d]);
}
}
return 0;
}