北大第2080题http://poj.org/problem?id=2080
问题大意是,给你一个数(n),然后从2000年1月1日起,输出n天后是哪一年,几月几号,星期几。
#include<stdio.h>
int rm[]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年
int pm[]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年
int isp(int year)
{
if((year%4==0&&year%100!=0)||year%400==0) return 1;
return 0;
}
int main()
{
int y,m,n,d,dd,day;
while(scanf("%d",&n)!=EOF)
{
if(n==-1)break;
y=2000,m=0,day=n;
while(n>=(isp(y)?366:365))
{
n=n-(isp(y)?366:365);
y++;
}
while(n>=(isp(y)?rm[m]:pm[m]))
{
n=n-(isp(y)?rm[m]:pm[m]);
m=(m+1)%12;
}
d=n%(isp(y)?rm[m]:pm[m])+1;
m=m+1;
printf("%d",y);
m<10?printf("-0%d",m):printf("-%d",m);
d<10?printf("-0%d",d):printf("-%d",d);
dd=day%7;
switch(dd)
{
case 0 : printf(" Saturday\n");break;
case 1 : printf(" Sunday\n");break;
case 2 : printf(" Monday\n");break;
case 3 : printf(" Tuesday\n");break;
case 4 : printf(" Wednesday\n");break;
case 5 : printf(" Thursday\n");break;
case 6 : printf(" Friday\n");break;
}
}
return 0;
}
杭电上第1076题http://acm.hdu.edu.cn/showproblem.php?pid=1076
问题大意是,给你一个年份(year),和一个数(n),从该year开始,期间经过n过平年后是哪个年份。
#include<stdio.h>
int main()
{
int year,n,m,y,count; //y:起始年
scanf("%d",&n);
while(n--)
{
count=0;
scanf("%d%d",&y,&m);
for(year=y;;year++)
{
if((year%4==0&&year%100!=0)||year%400==0)
{
count++;
}
if(m==count){
printf("%d\n",year);
break;
}
}
}
return 0;
}