hdu 2133 What day is it

来源:互联网 发布:java api安卓版 编辑:程序博客网 时间:2024/05/29 17:05

http://acm.split.hdu.edu.cn/showproblem.php?pid=2133


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).
 

Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
 

Sample Input
2007 11 17


#include<cstdio>#include<cstdlib>#include<math.h>#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<set>#include<vector>#include<map>#define ms(x) memset( (x),0,sizeof(x) );using namespace std;typedef long long int ll;int run(int n){if( ( n%4 == 0 && n%100!=0 )|| n%400 == 0) return 1;return 0;}int k[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int main(){//char s[8][10] = {,,"};char ans[8][10] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};int ry(2007),rm(11),rd(17);int y,m,d;//int ty=1,tm=1,td=1;//int t(0);//while(ty < ry) { t += 365+run(ty);ty++; t %= 7;}//while(tm < rm) { t += k[tm]; if(tm == 2 && run(ty)) t++; tm++ ;t%=7;}//while(td < rd) { t++,td++;t%=7;}//t %= 7;//cout<<t<<'\n';while(scanf("%d%d%d",&y,&m,&d) != EOF){if(k[m] < d){if(m == 2&&d == 28 + run(y));else {puts("illegal");continue;}}if(m == 0||y == 0||d==0){puts("illegal");continue;}int ty=1,tm=1,td=1;int t(0);while(ty < y) { t += 365+run(ty);ty++; t %= 7;}while(tm < m) { t += k[tm]; if(tm == 2 && run(ty)) t++; tm++ ;}while(td < d) { t++,td++;}puts(ans[t%7]);}return 0;}


ps

1.很简单的题  出了很多问题,第一个表打错了,第二个 判断闰年2月29号出错了,第三个月日可能出现0没考虑到

       希望以后少出这种问题了


0 0