• hdu1201(18岁生日)


    Problem Description

    Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

    Input

    一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

    Output

    T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

    Sample Input

    1
    1988-03-07

    Sample Output

    6574

    解题思路:先判断一下如果出生这年是2月29号的话,则直接判断18岁那年是否为闰年,如果不是直接返回-1;

    另外计算18岁内的日子总和,因为18岁那年的生日过完才算是真正的18岁,而此时已经经历了18年,所以先18*365赋给sum,接下来只需处理m和判断是否为闰年即可,是的话就加1。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int tol(int a,int b,int c);
     4 int main()
     5 {
     6     int T,y,m,d;
     7     while(cin>>T){
     8         for(int i=1;i<=T;i++){
     9             scanf("%d-%d-%d",&y,&m,&d);//注意格式
    10             cout<<tol(y,m,d)<<endl;
    11         }
    12     }
    13     return 0;
    14 }
    15 int tol(int a,int b,int c)
    16 {
    17     int sum=18*365;//先18*365再一次判断是否是闰年,是的话就加1
    18     int h=(((a+18)%4==0)&&((a+18)%100!=0))||((a+18)%400==0);
    19     if((b==2&&c==29)&&(!h))return -1;//18岁那年如果不是闰年的话,直接返回-1
    20     int g=((a%4==0)&&(a%100!=0))||(a%400==0);
    21     if(g&&(b<=2))sum+=1;
    22     for(int i=a+1;i<=a+18;i++){
    23         if(i!=a+18){
    24             if(((i%4==0)&&(i%100!=0))||(i%400==0))sum+=1;
    25         }
    26         else{
    27             if((b>2)&&h)sum+=1;
    28         }
    29     }
    30     return sum;
    31 }
    作者:霜雪千年
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    动与静
    ASP.NET 2.0 Membership
    又是asp.net 2.0的一个奇怪异常
    Cool tool !ASP.NET AJAX JavaScript Class Browser
    UserFul Methods
    中秋快乐
    Windows Vista RTM
    asp.net 2.0 下的表单验证Cookieless属性
    DataTable 内部索引已损坏:"4"
    asp.net 2.0 用户管理功能结构
  • 原文地址:https://www.cnblogs.com/acgoto/p/8466037.html
Copyright © 2020-2023  润新知