What day is it
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7604 Accepted Submission(s): 2162
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
个人代码(AC未通过):
#include <stdio.h>
int main()
{
int year,day,month,sum,i,week,yearsum,a[10000]={0},k;
char s[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for(k=1;k<=10000;k++){
if((k%4==0&&k%100!=0)||k%400==0) m[2]=29;
else m[2]=28;
yearsum=0;
for(i=0;i<13;i++) yearsum+=m[i];
a[k]=a[k-1]+yearsum;
}
while(~scanf("%d%d%d",&year,&month,&day)){
if(year>=10000||year<0||month>12||month<=0||day<=0||day>=32){
printf("illegal\n");
continue;
}else{
sum=day;
if((year%4==0&&year%100!=0)||year%400==0) m[2]=29;
else m[2]=28;
if(day>m[2]){
printf("illegal\n");
continue;
}
for(i=0;i<month;i++) sum+=m[i];
sum+=a[year-1];
week=sum%7;
printf("%s\n",s[week]);
}
}
return 0;
}
在改进后AC:
#include <stdio.h> //what day is it?
int r(int x){ //判断闰年
return x%4==0&&x%100!=0||x%400==0?1:0;
}
int main()
{
char s[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int m[2][13]={{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}};
int a[10000]={0},year,day,month,sum,i;
for(i=1;i<10000;i++) a[i]=a[i-1]+365+r(i); //累加各年天数
while(~scanf("%d%d%d",&year,&month,&day)){ //2月>28天(闰年除外),天数大于应有天数,月份>12以及0,0,0即超出
if(!r(year)&&month==2&&day>28||day>m[r(year)][month]||month>12||year==0||month==0||day==0)
printf("illegal\n");
else{
sum=day+a[year-1]; //sum=这年以前的总天数+这一年的day天数
for(i=0;i<month;i++) sum+=m[r(year)][i]; //再累加这年额外的天数 ,0是由于sum已经加了天数
printf("%s\n",s[sum%7]); //将结果%7理由字符数组输出结果
}
}
return 0;
}