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;
}
#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;
}
相关文章推荐
- NYOJ 题目219 An problem about date(数学,吉姆拉尔森公式)
- NYOJ 219 An problem about date
- nyoj-219-An problem about date
- NYOJ 219-An problem about date
- NYOJ219-An problem about date
- NYOJ 219 An problem about date(暴力)
- nyoj 219 An problem about date
- nyoj 219 An problem about date 日期计算 附加最优代码(基姆拉尔森公式)
- NYOJ 219 An problem about date
- NYOJ 题目219 An problem about date
- NYOJ-219-An problem about date(蔡勒公式根据日期推周几)
- NYOJ219 An problem about date 【数学】
- NYOJ 219 An problem about date
- NYOJ题目219-An problem about date
- NYOJ-219 An problem about date
- NYOJ 219 An problem about date
- An problem about date(nyoj 219)
- NYOJ 219 An problem about date
- (NYoj 219)An problem about date ——日期万能公式(基姆拉尔森计算公式)
- 219 An problem about date