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

    才错了几分钟,好好看了一下,发现自己的限制条件写错了,思路是有的,但是有点混乱,积累经验了

    以0岁生日和18岁生日作为起点终点,很清楚看到中间的年份的天数是必须加上的,问题在于多出的一天是有0岁年还是18岁年来决定

    画几条线段就可以看见要判断的区间处于那一年了:

       1.如果生日在2.29日之前,那么有误差的一年就在于这年,判断该年

       2.那么生日在2.29后,则误差不在今年,而是在最后一年。画图就可以将这个关系表达清楚了

       3.以前用暴力做。用暴力只会复杂化,而且那时候是超时了。

     1 #include <stdio.h>
     2 
     3 bool is_leap(int y){
     4     return ((y%4==0  && y%100!=0) || y%400==0);
     5 }
     6 
     7 int main()
     8 {
     9     int T , y , m ,d;
    10     scanf("%d",&T);
    11     while(T--)
    12     {
    13         int days = 0;
    14         scanf("%d-%d-%d",&y,&m,&d);
    15         if(m==2 && d==29)
    16         {
    17             printf("-1
    ");
    18             continue;
    19         }
    20         if(m < 3)
    21         {
    22             for(int i=0;i<18;i++)
    23                 days += is_leap(y+i)?1:0;
    24         }
    25         else 
    26         {
    27             for(int i=1;i<=18;i++)
    28                 days += is_leap(y+i)?1:0;
    29         }
    30         printf("%d
    ",days+18*365);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    BeanUtils
    eclipse导出说明文档
    MYSQL5.7的安装
    如何生成Android的keystore文件
    keystore
    安卓开发eclipse如何导出项目
    常用十六进制颜色对照表代码查询
    CheckBox
    RadioGroup和RadioButton
    TStringList 与 泛型字典TDictionary 的 哈希功能效率PK
  • 原文地址:https://www.cnblogs.com/cton/p/3436664.html
Copyright © 2011-2022 走看看