问题:http://hihocoder.com/problemset/problem/1148

给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。

思路:

1. 将问题转换成求两个日期间有几个闰年

  • 基本公式:闰年数(endYear,startYear) = 闰年数(0, endYear) - 闰年数(0, startYear)
  • 注意点:区间的端点值

2. 闰年的要求

  • 不能被100整除,能被4整除
  • 能被400整除

3. cnt = [i / 4]

  • cnt = [i / 4]取整: 这个可以得出从0到i中有几个数是4的倍数 1*4, 2*4, 3*4, 4*4......
  • 同理,可以求得有几个是100的倍数,几个是400的倍数

4. 关于两端,就是startYear和endYear是否应该再计算在内的问题

  • 1到10之间有 10 -1 + 1 = 10 个数
  • 所以应该注意区间的第一个数!直接减的话,会将它减掉了

5. 代码注意点

  • scanf()来读入有一定格式的输入,string类型不用来存字符串的。
 string str;
scanf("%s", str);//不应该这么用
char strs[];
scanf("%s", strs);
  • scanf()需要包含头文件 #include <string.h>

代码:

 #include <iostream>
#include <string.h>
using namespace std; bool isLeap(int year)
{
if ((year % != && year % == ) || (year % == && year % == ))
return true;
return false;
} int main()
{
int cnt, startDay, endDay, startYear, endYear, leapCnt, i = ;
char startMonth[], endMonth[]; cin >> cnt;
while (i++ < cnt)
{
leapCnt = ;
scanf("%s %d, %d", startMonth, &startDay, &startYear);
scanf("%s %d, %d", endMonth, &endDay, &endYear); //日期已经超过2月29日,则不应该再考虑startYear里面的2月29日
if ((strcmp(startMonth, "February") != && strcmp(startMonth, "January") != )
|| (strcmp(startMonth, "February") == && startDay > ))
startYear++;
//日期没有超过2月29日,则不应该再考虑endYear里面的2月29日
if (strcmp(endMonth, "January") ==
|| (strcmp(endMonth, "February") == && endDay < ))
endYear--;
leapCnt = (endYear / - endYear / + endYear / ) - (startYear / - startYear / + startYear / );
if (isLeap(startYear))//startYear里面的2月29日!
leapCnt++;
cout << "Case #" << i << ": " << leapCnt << endl;
}
return ;
}

【hihoCoder】1148:2月29日的更多相关文章

  1. hihoCoder 1148 2月29日

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: ...

  2. hihocoder#1148 : 2月29日 计算闰年的个数

    计算到某年为止的闰年数,其实很简单.设要计算的年为A,则到A年为止(含A年)的闰年数为: 闰年数=INT(A/)-INT(A/)+INT(A/) 这里:INT为取整数函数 #include <c ...

  3. Hihocoder 2月29日

      时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年 ...

  4. 2016年12月29日 星期四 --出埃及记 Exodus 21:24

    2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...

  5. 2016年11月29日 星期二 --出埃及记 Exodus 20:20

    2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...

  6. 2016年10月29日 星期六 --出埃及记 Exodus 19:14

    2016年10月29日 星期六 --出埃及记 Exodus 19:14 After Moses had gone down the mountain to the people, he consecr ...

  7. 2016年6月29日 星期三 --出埃及记 Exodus 14:26

    2016年6月29日 星期三 --出埃及记 Exodus 14:26 Then the LORD said to Moses, "Stretch out your hand over the ...

  8. [MySQL]--&gt;查询5天之内过生日的同事中的闰年2月29日问题的解决过程

    前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...

  9. SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用

    原文:SQL点滴6-"微软不认识闰年2月29日"&字符"N"的作用 http://www.cnbeta.com/articles/50580.htm这个 ...

随机推荐

  1. 第一章 简单工厂模式 及 UML中类图的表示方法

    写一个简单计算器程序时,可以写一个操作类,然后加.减.乘.除操作分别继承它,复写操作计算结果的方法.写一个简单工厂类,通过输入的操作符,使用操作类来new一个相应的操作类的子类对象.这样,工厂就实例化 ...

  2. 中间件Study-了解什么是中间件

    一.中间件含义:中间价是位于各种平台(硬件和操作系统)和各种应用之间的通用服务. 帮助应用实现高效的.可靠的消息使应用之间实现便捷的互联互通高效.可靠构建企业应用实现分布式应用的快速搭建和部署注:中间 ...

  3. MVC Code First 自动生成数据库

    1.新建一个MVC项目

  4. Xcode8更新约束

    Xcode升级之后就会发现约束设置好,想更新一下约束,看看约束是不是刚刚好,习惯性的去点右下角的更新约束的结果却发现没有更新约束的这一项了,好尴尬. 后来发现原来在Xcode8的约束更新换了一个地方, ...

  5. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  6. app后端设计--总目录 (转)

    特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...

  7. FFT与乒乓球

    刚刚打乒乓球的时候,看到一个旋球.想起<傅里叶分析之掐死教程>: “正弦曲线波叠加出一个带90度角的矩形波来” 我们把多个旋叠加在一起,是不是就可以让这个球跳舞了呢?

  8. Axure 自适应视图

    假设B为A的子视图 继承: A更新 文字内容.交互事件.禁用: 位置.尺寸.样式.交互样式 时, B都会继承响应更新变化 B更新 文字内容.交互事件.禁用时,A也会更新 B更新 位置.尺寸.样式.交互 ...

  9. Qtablevies获取内容

    首先是向tableview中添加内容 model=new QStandardItemModel(); model->setHorizontalHeaderItem(, new QStandard ...

  10. java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别

    一.首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法. 简单介绍一下这三个方法: 第一个方法Class.forName("xxx&q ...