码迷,mamicode.com
首页 > 编程语言 > 详细

蓝桥杯-算法提高-日期计算

时间:2015-03-20 22:00:42      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:

  算法提高 日期计算  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
  输入只有一行
  YYYY MM DD
输出格式
  输出只有一行
  W
数据规模和约定
  1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
  1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5

//代码:
#include<stdio.h>
int f[13] ={0,31,28,31,30,31,30,31,31,30,31,30,31};
int is_leapyear(int Y){
	if(Y%4==0&&Y%100!=0||Y%400==0)
	return 1;
	return 0;
}
int DAY(int Y,int M,int D){
	int  i,days=0;
	for(i=1;i<M;++i){
		days+=f[i];
	}
	days+=D;
	if(is_leapyear(Y)&&M>2)
	  days++;
	return days;
}
int main(){
	int year,month,day;
	while(~scanf("%d%d%d",&year,&month,&day)){
		int  dd=0,xq;
		if(year>2011||year==2011&&month>11||year==2011&&month==11&&day>=11) {
		    for(int  i=2011;i<year;++i){
			  dd+=365;
			  if(is_leapyear(i))
			   dd++;
		    }
		    dd+=DAY(year,month,day);	
		    dd-=DAY(2011,11,11); //?????
		    xq=(5+dd)%7;  //星期 
		}
		else
		{  //已2012 1 1 为 标准量值 
			for(int i=year+1;i<=2011;++i){
				dd+=365;
				if(is_leapyear(i))
				  dd++;
			}
			dd-=365-DAY(2011,11,11);
			dd+=365-DAY(year,month,day);
			if(is_leapyear(year))
			  dd++;
			//printf("%d\n",dd);
			//printf("星期:%d\n",(5-(dd)%7+7)%7) ;
		    xq=(5-dd%7+7)%7;
		
		}
			if(xq==0)
			printf("7\n");
			else
			printf("%d\n",xq);
	}
	return 0;
}



 

蓝桥杯-算法提高-日期计算

标签:

原文地址:http://blog.csdn.net/qq_18062811/article/details/44497711

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!