2015编程之美资格赛:2月29日
来源:互联网 发布:windows专业版激活码 编辑:程序博客网 时间:2024/05/01 20:12
题目1 : 2月29日
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
4January 12, 2012March 19, 2012August 12, 2899August 12, 2901August 12, 2000August 12, 2005February 29, 2004February 29, 2012
- 样例输出
Case #1: 1Case #2: 0Case #3: 1Case #4: 3
描述
给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。
只有闰年有2月29日,满足以下一个条件的年份为闰年:
1. 年份能被4整除但不能被100整除
2. 年份能被400整除
输入
第一行为一个整数T,表示数据组数。
之后每组数据包含两行。每一行格式为"month day, year",表示一个日期。month为{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"}中的一个字符串。day与year为两个数字。
数据保证给定的日期合法且第一个日期早于或等于第二个日期。
输出
对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1开始,Y为答案。
数据范围
1 ≤ T ≤ 550
小数据:
2000 ≤ year ≤ 3000
大数据:
2000 ≤ year ≤ 2×109
#include <iostream>#include <cstdio>#include <string.h>#include <cstdlib>using namespace std;bool IsRun(int n){if(n%4 == 0 && n%100 != 0)return true;else if(n%400 ==0)return true;else return false;}int monToInt(const char *a){if(strcmp(a,"January") == 0)return 1;else if(strcmp(a,"February") == 0)return 2;else if(strcmp(a,"March") == 0)return 3;else if(strcmp(a,"April") == 0)return 4;else if(strcmp(a,"May") == 0)return 5;else if(strcmp(a,"June") == 0)return 6;else if(strcmp(a,"July") == 0)return 7;else if(strcmp(a,"August") == 0)return 8;else if(strcmp(a,"September") == 0)return 9;else if(strcmp(a,"October") == 0)return 10;else if(strcmp(a,"November") == 0)return 11;else if(strcmp(a,"December") == 0)return 12;else return -1;}int main(){int T;scanf("%d",&T);int test = 0;while(T--){test++;char mon1[10],mon2[10];memset(mon1,0,10*sizeof(char));memset(mon2,0,10*sizeof(char));int day1,year1;int day2,year2;scanf("%s %d,%d",mon1,&day1,&year1);scanf("%s %d,%d",mon2,&day2,&year2);int mon1_int,mon2_int;mon1_int = monToInt(mon1);mon2_int = monToInt(mon2);if(mon1_int == -1 || mon2_int == -1){printf("month error\n");break;}int num = 0;if(year2 - year1 < 0 ){//donothing}else if(year1 == year2){bool tem = IsRun(year1); if(IsRun(year1) && (mon1_int == 1 || (mon1_int == 2 && day1 <= 29)) && (mon2_int > 2 || ( mon2_int == 2 && day2 == 29)))num++;}else if(year1 - year2 == 1){if(IsRun(year1) && mon1_int < 2)num++;else if(IsRun(year1) && mon1_int == 2 && day1 <= 29)num++;if(IsRun(year2) && mon2_int > 2)num++;else if(IsRun(year2) && mon2_int == 2 && day2 == 29)num++;}else{for(int i = year1 + 1;i < year2;++i){if(IsRun(i))num++;}if(IsRun(year1) && mon1_int < 2)num++;else if(IsRun(year1) && mon1_int == 2 && day1 <= 29)num++;if(IsRun(year2) && mon2_int > 2)num++;else if(IsRun(year2) && mon2_int == 2 && day2 == 29)num++;} printf("Case #%d: %d\n",test,num);}//getchar();//getchar();//getchar();return 0;}
0 0
- 2015编程之美资格赛:2月29日
- 2015编程之美资格赛 A 2月29日
- 编程之美2015资格赛 A 2月29日
- 编程之美2015资格赛 A.2月29日
- 2015编程之美资格赛-2月29日
- 编程之美资格赛-2月29日
- 编程之美2015资格赛--题目1 : 2月29日
- 编程之美2015资格赛 - 题目1 : 2月29日
- 2015编程之美资格赛:2月29日 模拟题
- hiho 编程之美2015资格赛(2月29日-模拟日期)
- 编程之美2015资格赛 题目1 : 2月29日
- 2015编程之美资格赛题目1 : 2月29日
- 编程之美2015资格赛 题目1 : 2月29日
- `2015 编程之美 资格赛 第一题 hihocoder 区间闰年 2月29 数量 模拟题
- 2015 编程之美 2月29日
- 编程之美2015资格赛#2
- 编程之美2015资格赛
- 编程之美2015资格赛
- Foundation NSObject常用方法 类名方法名和字符串之间相互转换
- Oracle 12c 安装教程
- 第26讲—项目5—个人所得税计算器
- TOFEL托福经验贴
- hdu 2043 密码
- 2015编程之美资格赛:2月29日
- 今天在百度百科创建了一个词条《安卓壁纸游戏》
- Pascal's Triangle II LeetCode
- 300道IT面试题
- Tomcat配置虚拟主机、配置web应用的几种方式
- Andorid连接USB打印机
- 第三章 第3,4,5,7,8,9,10,11,12题
- 解决eclipse闪退的问题
- openCV二值函数threshold的使用