zoukankan      html  css  js  c++  java
  • HDU-1201-18岁生日

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=1201

    这个题目在比赛的时候提交了很多次,都是WA,主要错在,我没有考虑最后一年的,后一年,即y+18那一年如果是闰年并且月份m>=3||(m==2&&d==29)

    那么天数要多加一天。

    分三个部分  y   y+1->y+17   y+18

    WA代码

    #include<stdio.h>
    int main(void)
    {
    int kk(int n);
    int T;
    int y,m,d;
    int i,j;
    int s;
    scanf("%d",&T);
    while(T--)
    {
    s=0;
    scanf("%d-%d-%d",&y,&m,&d);
    if(kk(y)&&m==2&&d==29)
    {
    if(kk(y+17)==0)
    {
    printf("-1 ");
    continue;
    }
    }
    if(kk(y))
    {
    if(m<=2&&d<=28)
    s=s+366;
    else
    s=s+365;
    }
    else
    s=s+365;
    for(i=y+1;i<y+17;i++)
    {
    if(kk(i))
    s=s+366;
    else
    s=s+365;
    }
    if(kk(y+17))
    {
    if(m>2)
    s=s+366;
    else if(m==2&&d==29)
    s=s+366;
    else
    s=s+365;
    }
    else
    s=s+365;
    printf("%d ",s);
    }
    return 0;
    }

    int kk(int n)
    {
    if(n%4==0)
    {
    if(n%100==0)
    {
    if(n%400==0)
    return 1;
    else
    return 0;
    }
    else
    return 1;
    }
    else
    return 0;
    }

     AC代码

    #include<stdio.h>
    int main(void)
    {
    int kk(int n);
    int T;
    int y,m,d;
    int i,j;
    int s;
    scanf("%d",&T);
    while(T--)
    {
    s=0;
    scanf("%d-%d-%d",&y,&m,&d);
    if(kk(y)&&m==2&&d==29)
    {
    if(kk(y+17)==0)
    {
    printf("-1 ");
    continue;
    }
    }
    if(kk(y))
    {
    if(m<=2&&d<=28)
    s=s+366;
    else
    s=s+365;
    }
    else
    s=s+365;
    for(i=y+1;i<=y+17;i++)
    {
    if(kk(i))
    s=s+366;
    else
    s=s+365;
    }
    if(kk(y+18)&&(m>=3||(m==2&&d==29)))
    s++;
    printf("%d ",s);
    }
    return 0;
    }

    int kk(int n)
    {
    if(n%4==0)
    {
    if(n%100==0)
    {
    if(n%400==0)
    return 1;
    else
    return 0;
    }
    else
    return 1;
    }
    else
    return 0;
    }

    AC代码

    #include<stdio.h>
    int main(void)
    {
    int run(int n);
    int t,i;
    int y,m,d;
    scanf("%d",&t);
    while(t--)
    {
    int s=0;
    scanf("%d-%d-%d",&y,&m,&d);
    if(run(y+18)==0&&m==2&&d==29)
    {
    printf("-1 ");
    continue;
    }
    if(run(y)&&m<=2)
    s++;
    for(i=1;i<=17;i++)
    {
    if(run(y+i))
    s++;
    }
    if(run(y+18)&&(m>2||(m==2&&d==29)))
    s++;
    printf("%d ",18*365+s);
    }
    return 0;
    }

    int run(int n)
    {
    if(n%400==0||(n%4==0&&n%100!=0))
    return 1;
    return 0;
    }

    程序之路漫漫无期,唯有坚持不懈,无畏艰难,才能攀登高峰。

  • 相关阅读:
    DES 算法的 C++ 与 JAVA 互相加解密
    ORACLE SQL 小记
    ACE 的头文件包含
    WTL 程序中显示 HTML
    GIS 中地理坐标和屏幕坐标的标准转换方法
    算盘中国古代伟大的计算器
    DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决
    服务端程序线程运行信息管理器
    ATL::CImage 的透明通道的处理与格式转换
    kinect sdk开发入门WPFdemo笔记
  • 原文地址:https://www.cnblogs.com/liudehao/p/3930631.html
Copyright © 2011-2022 走看看