zoukankan      html  css  js  c++  java
  • codeforces B. Calendar 解题报告

    题目链接:http://codeforces.com/problemset/problem/304/B

    题目意思:给出两个日期,需要算出这两个日期之间有多少日。

          细心模拟就可以了。特别要注意的是,两个日期是同一年的处理。我的解决方法是,算出小的那一个日期的天数离它所处月份还有多少天,大的日期的天数加上去,还有一部分是它们之间相隔的月数总天数。另外,为了方便处理,保证了第一个处理的日期是较小的。

        

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 static char dd[2][13] = {
     8     {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  
     9     {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    10 };
    11 
    12 int jd_year(int year)
    13 {
    14     if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    15         return 1;
    16     return 0;
    17 } 
    18 
    19 int day_of_year(int year, int month, int day)  // 算出该日期在该year年处于第几天
    20 {
    21     for (int i = 1; i < month; i++)
    22         day += dd[jd_year(year)][i];
    23     return day;
    24 }
    25 
    26 int main()
    27 {
    28     int y, m, d, y1, m1, d1, i, cnt;
    29     scanf("%d:%d:%d", &y, &m, &d);
    30     scanf("%d:%d:%d", &y1, &m1, &d1);
    31     if (y > y1 || (y == y1 && m > m1) || (y == y1 && m == m1 && d > d1))
    32     {
    33         swap(y, y1);
    34         swap(m, m1);
    35         swap(d, d1);
    36     }
    37     if (y == y1)
    38     {
    39         if (m != m1)
    40         {    
    41             cnt = dd[jd_year(y)][m]-d + d1;
    42             for (i = m+1; i < m1; i++)
    43                 cnt += dd[jd_year(y)][i];
    44         }
    45         else
    46             cnt = d1 - d;
    47     }
    48     else
    49     {
    50         cnt = day_of_year(y, m, d);
    51         if (jd_year(y))
    52             cnt = 366 - cnt;
    53         else
    54             cnt = 365 - cnt;
    55         cnt += day_of_year(y1, m1, d1);
    56         for (i = y+1; i < y1; i++)
    57         {
    58             if (jd_year(i))
    59                 cnt += 366;
    60             else
    61                 cnt += 365;
    62         }
    63     }
    64     printf("%d
    ", cnt);
    65     return 0;
    66 }
    67 
    68     

         

  • 相关阅读:
    最漂亮( iTerm2+oh-my-zsh配色)
    python对excel的操作
    appium环境搭建
    Python单元测试unittest
    git命令日常总结
    mongon数据库的查询样例
    组合逻辑电路笔记
    Jlink驱动下载
    机组笔记
    计算机网络随笔(一部分知识点)
  • 原文地址:https://www.cnblogs.com/windysai/p/3535918.html
Copyright © 2011-2022 走看看