题目链接: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\n", cnt);
65     return 0;
66 }
67
68     

转载于:https://www.cnblogs.com/windysai/p/3535918.html

codeforces B. Calendar 解题报告相关推荐

  1. codeforces 50A-C语言解题报告

    50A题目网址 解题报告-others 题目解析 1.输入n x m大小的木板,使用21大小的多米诺去填满,求最多的多米诺数目 2.通过分析把木板分为奇数和偶数的情况 1)有一边是偶数的情况: 使用2 ...

  2. codeforces 122A-C语言解题报告

    122A题目网址 题目解析 1.输入数字(在1000以内),若能被4,7幸运数整除或只含4,7则输出YES,否则输出NO 举例: 输入: 107 输出: NO 2.解题关键: 1)使用列举法,把所有符 ...

  3. codeforces 118A-C语言解题报告

    118A题目网址 题目解析 1.输入一个英语字符串,要求把其中的元音字母删去(元音是字母"A"."O"."Y"."E". ...

  4. codeforces 231A-C语言解题报告

    231A题目网址 题目解析 1.输入比赛的题目,每一道题3个人的解题状况(0或1),输出总的解答题目(每一个题至少有2个,记1次) 2.在for循环中去录入每道题的解答状况 3.因为有题目解答的计算, ...

  5. codeforces 499B.Lecture 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/B 题目意思:给出两种语言下 m 个单词表(word1, word2)的一一对应,以及 profes ...

  6. codeforces 486A-C语言解题报告

    题目网址 题目解析 1.f(n)=(-1)^nn 2.使用long long int 3.总结找出规律: if(i%2!=0) return -1(i+1)/2; else return i/2; 直 ...

  7. codeforces 705A-C语言解题报告

    题目网址 题目解析 1.重点:结尾是it,中间使用that连接,所以使用for循环,奇数输出I hate,偶数输出I love,i!=n时,输出that 代码 #include<stdio.h& ...

  8. codeforces 158B-C语言解题报告

    题目网址 题目解析 参考博客 代码 #include<iostream> #include<string.h> #include<algorithm> #inclu ...

  9. codeforces 318A-C语言解题报告

    题目网址 题目 1.一个数先奇数从小到大再偶数从小到大(1–n),问第k个数是什么? 2.举例发现规律: 第k个数与n的奇偶无关,使用中间数mid=(a+1)/2;进行判断,k是奇数还是偶数 奇数:c ...

最新文章

  1. Linux中的popen-pclose
  2. 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧
  3. 【NLP】 NLP领域最具影响力的国内外会议介绍
  4. Qt Creator开放项目
  5. fit,fit_generator的使用区别
  6. java设计模式之状态模式_Java中的状态设计模式
  7. Python(一)缺点
  8. 查看登陆系统用户的信息的三种方法详解
  9. 推荐两个有意思的自定义View小项目
  10. 在程序中表示什么_程序开发中:什么是前后端分离?你搞清楚了吗?
  11. SQL日志文件损坏或丢失造成数据库置疑的解决办法
  12. 百家讲坛之评说《资治通鉴》之探寻历史的密码
  13. python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~
  14. uniapp+uniCloud实现批量上传图片到云端(解决h5端跨域问题)
  15. 元宇宙研讨会-空间设计与交互技术构造的叙事世界
  16. Fortify常见漏洞解决方案
  17. Python代码实现图像增强(线性变换、对数变换、幂律变换、分段线性变换、灰度级分层、直方图均衡化、平滑滤波器、锐化滤波器)
  18. 【使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本时报错】
  19. Android程序员如何高薪接私活?十年老炮告诉你,看这一篇就够了
  20. 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)

热门文章

  1. 集合高德地图搜索--导出Excel数据 工具
  2. 计算机网络——IP地址的作用
  3. 一般计算机电源都在多少压力,一般计算机电源都在多少电压 计算机电源一般都在多少电压...
  4. 推荐系统实践读书笔记-06利用社交网络数据
  5. 关于attach和detach的疑问
  6. Coding代码使用教程
  7. [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述
  8. 轻松上手 | 使用国内资源安装 K3s 全攻略
  9. 2021极客大挑战web部分wp
  10. T94 EndNote Journal List批量更新方案