杭电水题之1201

这题比较水,就是一个判断闰年的问题,只是中间有一些细节要注意,我们说十八岁生日就是过了十八年,就像抓周就是满一岁,那就是过了一年。只是这个之中需要考虑一个平年还是闰年的问题,因为只有闰年才有2月29,别的没有,所有如果出生的时候就是闰年并且刚好是2月29的话,就不会有十八岁生日了,自然就是输出-1.再者就是需要讨论一下再者十八年之中的闰年个数。

  首先看看是出生的时候是闰年的情况,难么在十八岁十八年之中需不需要将出生的这一年到下一年的这个时候算成是366天,这就得看出生的日期了。比如2月29之前出生的,到下一个月的这个时候,我们就有366天,因为在二月他度过了2月29这一天比平常多一天。

再者就是最后一个年是不是闰年(中间的不需要额外考虑,是闰年就是366天,不是就是365天),如果最后一年是闰年,就需要考虑出生的时间,如果是2月28(只有28)之后出生的就有这么一天多出来,因为 重倒数第二年到组后一年是不是度过了最后一年的29号需要看出生,现在出生在28之后,就是可以度过29号这一天,那么就有366天。

下面提供几组数据这个数据对了基本就可以AC

13
2004-1-22
2004-2-28
2004-2-29
2004-4-20
2003-2-20
2003-2-28
2003-3-20
2002-2-20
2002-2-28
2002-3-20
2001-2-20
2001-2-28
2001-3-20




结果:


6575
6575
-1
6574
6575
6575
6575
6574
6574
6575
6574
6574
6574
最后在提供一个AC的的代码仅供参考。

include<iostream>
using namespace std;
int main()
{
   int N;
   char a,b;
   int year,month, day,s,num,i;
   cin>>N;
   while(N--)
   {   num=0;
       s=0;
       cin>>year>>a>>month>>b>>day;    
       if((year%4==0&&year%100!=0)||year%400==0)
       {
           if(month==2&&day==29)
               s=-1;
          else if(month==1)
              s=366;
          else if(month==2&&day<=28)
              s=366;
          else s=365;
       }
       else s=365; 

       
     for(i=1;i<=17;i++)
     {  year+=1;
    
     if((year%4==0&&year%100!=0)||year%400==0)
         num+=366;
     else  num+=365;

     }
      year+=1;
    if((year%4==0&&year%100!=0)||year%400==0)
    {
        if(month>=3)
            num+=1;
        else num+=0;
    }
     if(s==-1)
         s=-1;
     else s+=num;
    
     cout<<s<<endl;

           
      
   }
   return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值