HDU2133(日期计算)

来源:互联网 发布:tfidf java高效 编辑:程序博客网 时间:2024/05/20 18:48

What day is it

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2921    Accepted Submission(s): 858


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
 

Sample Output
Saturday
 
 
#include<iostream>#include<cstdio>using namespace std;typedef struct{int year,mon,day;}Yer;int month[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  bool is_leap(int year){if((year%4==0&&year%100)||(year%400==0))return true;return false;}bool is_legal(Yer cur){ if(cur.year<= 0||cur.year>=10000||cur.mon<=0||cur.mon>=13||cur.day<=0||cur.day>=32)          return false;  if((!is_leap(cur.year)&&cur.day<=month[cur.mon])||(cur.mon==2&&is_leap(cur.year)&&cur.day<=month[cur.mon]+1))return true;else return false;}bool is_pre(Yer a,Yer b){if(a.year<b.year)return true;else if(a.year==b.year&&a.mon<b.mon)return true;else if(a.year==b.year&&a.mon==b.mon&&a.day<b.day)return true;else areturn false;}void print(bool flag,int sum){sum=sum%7;if(!flag)sum=7-sum;sum=sum%7;switch(sum){case 0:printf("Saturday\n");break;case 2:printf("Monday\n");break;case 3:printf("Tuesday\n");break;case 4:printf("Wednesday\n");break;    case 5:printf("Thursday\n");break;case 6:printf("Friday\n");break;case 1:printf("Sunday\n");break;}return ;}void calculate(bool flag,Yer a,Yer b){int i,sum;int ta,tb;sum=0;ta=0;int taa=365;for(i=1;i<a.mon;i++){if(i==2&&is_leap(a.year)){ta+=1;taa=366;}ta+=month[i];}ta+=a.day;tb=0;for(i=1;i<b.mon;i++){if(i==2&&is_leap(b.year)){tb+=1;}tb+=month[i];}tb+=b.day;if(a.year==b.year){sum=tb-ta;print(flag,sum);return ;}for(i=a.year+1;i<b.year;i++){if(is_leap(i))sum+=1;sum+=365;}sum=sum+taa-ta+tb;print(flag,sum);return;}int main(){Yer cur,fixed;fixed.year=2007;fixed.mon=11;fixed.day=17;while(~scanf("%d%d%d",&cur.year,&cur.mon,&cur.day)){if(!is_legal(cur)){printf("illegal\n");continue;}if(is_pre(fixed,cur))calculate(true,fixed,cur);else calculate(false,cur,fixed);}return 0;}

原创粉丝点击