本题是一道细心题考虑各种情况
#include<stdio.h>
int pan(int n)
{
if(n%400==0||(n%4==0&&n%100!=0))
return 1;
else return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int day,mon,year,sum=0,i;
scanf("%d-%d-%d",&year,&mon,&day);
if(pan(year)==1&&day==29&&pan(year+18)==0)
{
printf("-1\n");
continue;
}
sum=365*18;//先按平年算
for(int i=year+1;i<year+18;i++)//计算有多少润年
{
if(pan(i)==1) sum+=1;
}
if(pan(year)==1&&(mon==1||(mon==2&&day<29))) sum+=1;//生日那一年是润年且在一月或二月29之前
if(pan(year+18)==1&&(mon>=3)) sum+=1;//18岁那一年的生日在3月后且是润年
printf("%d\n",sum);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 20:40:51