nyoj-219-An problem about date

来源:互联网 发布:网络玄幻小说合集 编辑:程序博客网 时间:2024/04/29 11:01

//超时代码
#include<stdio.h>
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int nian(int y)
{
 if(y%4==0&&y%100!=0||y%400==0)
  return 1;
 else return 0;
}
int main()
{
 int y,m,d;
 while(scanf("%d%d%d",&y,&m,&d)!=EOF)
 {
  int i,j,sum1,sum2,t1,n;
  sum1=274;sum2=91;//以1949 10 1为标准
  t1=0;
  if(nian(y))
  {
   for(i=1;i<m;i++)
    if(i==2)
     t1+=29;
    else
     t1+=a[i];  
  }
  else
  {
   for(i=1;i<m;i++)
    t1+=a[i];
  }
  t1+=d;
  if(y<=1949)
  {
   for(i=0;y+i<1949;i++)
    if(nian(y+i))
     sum1+=366;
    else
     sum1+=365;
    if(sum1>=t1)
    {
     n=sum1-t1;
     printf("%d\n",6-n%7);
    }
    else
    {
     n=t1-sum1; 
     printf("%d\n",n%7-1);
    }
    
  }
  else
  {
   for(i=1;i<y-1949;i++)
    if(nian(1949+i))
     sum2+=366;
    else sum2+=365;
    n=t1+sum2;
    printf("%d\n",n%7-1);
  }
 }
 return 0;

//不超时的代码
#include<stdio.h>
int a[96001]={0};//以1600年1月1日星期6为标准
int b[13]={31,31,28,31,30,31,30,31,31,30,31,30};
int c[13]={31,31,29,31,30,31,30,31,31,30,31,30};
int nian(int y)
{
 if(y%4==0&&y%100!=0||y%400==0)
  return 1;
 else return 0;
}
void tian()
{
 int i,j,k;
 k=1;
 for(i=0;i<8000;i++)
 {
  if(nian(1600+i))
   for(j=1;j<13;j++)
    a[k++]=a[k-1]+c[j%12];
   else
    for(j=1;j<13;j++)
    a[k++]=a[k-1]+b[j%12];
 }
}
int main()
{
 int y,m,d,n,sum;
 tian();
 while(scanf("%d%d%d",&y,&m,&d)!=EOF)
 {
  n=(y-1600)*12+m-1;
  sum=a[n]+d;
  printf("%d\n",(sum+5)%7);
 }
 return 0;
}

 

//高手的代码
#include<stdio.h>
int main()
{
    int d,m,y;
    while(scanf("%d%d%d",&y,&m,&d)!=EOF)
    {
        if(m>=1&&m<=2)
        {
            m+=12;
            y-=1;
        }
        printf("%d\n",(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7);
    }
    return 0;
}

原创粉丝点击