18岁生日

来源:互联网 发布:tomcat shutdown 端口 编辑:程序博客网 时间:2024/05/01 00:12
问题 D: 18岁生日
时间限制: 1 Sec  内存限制: 32 MB
提交: 24  解决: 10
[提交][状态][讨论版]
题目描述
zzq的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
输入
输入的第一行是一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
输出
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
样例输入
1
1988-03-07
样例输出
6574
提示
[提交][状态][讨论版]
解题思路:
主要问题在于生日的判断,闰年的判断.
解题代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n,y,m,d,a,i,j,k,r;
char str[50];
scanf("%d",&n);
while(n--)
{
scanf("%d-%d-%d",&y,&m,&d);
r=0;

if(m==2&&d==29)
{
r=-1;
a=0;
}
else
for(i=y;i<=y+18;i++)
{ if(i==y+18)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
if(m>2)
r+=1;

}

}
else if(i==y)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
if(m<3)
r+=366;
else
r+=365;
}
else
r+=365;
}
else if((i%4==0&&i%100!=0)||i%400==0)
{
r+=366;
}
else
r+=365;
}
if(a!=0)
printf("%d\n",r);
else
printf("%d\n",r);
}
return 0;
}
错误解析:
之前总是出错就在于具体日期原先是按18*365+r来求的.
附(错误代码):
#include<stdio.h>
#include<string.h>
int main()
{
int n,y,m,d,a,i,j,k,r;


scanf("%d",&n);
while(n--)
{
scanf("%d-%d-%d",&y,&m,&d);
r=0;

if(m==2&&d==29)
{
r=-1;
a=0;
}
else
for(i=y;i<=y+18;i++)
{ if(i==y+18)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
if(m>2)
r++;
}
}
else if(i==y)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
if(m<3)
r++;
}
}
else if((i%4==0&&i%100!=0)||i%400==0)
{

r++;

}

}
if(a!=0)
printf("%d\n",r+18*365);
else
printf("%d\n",r);
}
return 0;
}



原创粉丝点击