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

  算法提高 日期计算  
时间限制: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;
}



 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值