nyoj 219 An problem about date 日期计算 附加最优代码(基姆拉尔森公式)

第一次直接计算的   超时了。后来把天数存贮在数组中 也算过了 不知道这题为什么分类在动态规划里面

#include <stdio.h>
int main()
{
	int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31},year,mon,day;
	long long b[9605]={0},sum=0;
	for(int i=1600;i<9600;i++)
	{
		if(i%4==0&&i%100||i%400==0)
		sum+=366;
		else
		sum+=365;
		b[i]=sum;
	}
	while(scanf("%d %d %d",&year,&mon,&day)!=EOF)
	{
	    sum=b[year-1];
		if(year%4==0&&year%100||year%400==0)
		a[2]=29;
		else
		a[2]=28;
		for(int i=1;i<mon;i++)
		sum+=a[i];
		printf("%d\n",(sum+day+5)%7);
	}
	return 0;
}        
最优代码。。。我也是服了  神人哪里找的公式

 
#include<cstdio>
int main()
{
	int y,m,d;
	while(~scanf("%d%d%d",&y,&m,&d))
	{
		if(m<3) m+=12,--y;
		printf("%d\n",(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7); //蔡勒公式的变种
	}
}                      



你可能感兴趣的:(nyoj,nyoj219,219)