2018ACM暑假集训第一次周赛 J - What day is it

                                 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;
}

猜你喜欢

转载自blog.csdn.net/qq_30007603/article/details/81225869
今日推荐