【hihoCoder】1148:2月29日
2024-10-18 18:31:09
问题: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 ;
}
最新文章
- C#中两个Form窗口之间的传值(父->;子)(子->;父)
- Nodejs与ES6系列3:generator对象
- 【学】jQuery的源码思路6——增加each,animaion,ajax以及插件机制
- CI登录验证
- jQuery Ajax 简单的实现跨域请求
- Ubuntu 下配置ftp服务端
- MongoDB 语法(转)
- QCon 2013 上海 -- 互联网金融
- Ubuntu下VSFTPD(五)(匿名FTP设置方法)
- 保存网页MHT
- 符合altium designer操作习惯的cadence快捷键设置
- 使用单例模式实现自己的HttpClient工具类
- Memcached和Redis简介
- Windows下WebStorm使用SVN(转)
- JS中处理单个反斜杠(即转义字符的处理)
- RabbitMQ Cluster群集安装配置
- 第13章 切换到混合流并添加API访问 - Identity Server 4 中文文档(v1.0.0)
- nuxt博客项目
- Python 的 Magic Methods 指南(转)
- 关于vue的语法规则检测报错问题