您的位置:首页 > 其它

nyoj-219-An problem about date

2013-08-21 10:57 316 查看
//超时代码

#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
+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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: