题目链接https://vjudge.net/problem/LightOJ-1414

经典C语言题。大致意思是输入两个日期,输出包含两个日期在内的有多少个闰日。

Sample Input

4

January 12, 2012

March 19, 2012

August 12, 2899

August 12, 2901

August 12, 2000

August 12, 2005

February 29, 2004

February 29, 2012

Sample Output

Case 1: 1

Case 2: 0

Case 3: 1

Case 4: 3

方法一:(耗时长,超时,但思想中规中矩)

1、定义月份数组,写一个查找月份的函数。

2、每个年份分别判断是否是闰年

#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
char month[][20]={"January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"};
int find_month(char m[]){for(int i=0;i<12;i++){if(strcmp(m,month[i])==0)return i+1;}return 0;
}
bool leap(int year){if((year%4==0&&year%100!=0)||year%400==0) return true;return false;
}
int main(){int T,day1,year1,day2,year2,kase=0;char temp1[20],temp2[20];scanf("%d",&T);while(T--){int cnt=0;scanf("%s %d, %d",temp1,&day1,&year1);scanf("%s %d, %d",temp2,&day2,&year2);int month1=find_month(temp1),month2=find_month(temp2);//printf("%d %d %d %d %d %d\n",year1,month1,day1,year2,month2,day2);if(leap(year1)){if(month1<=2) cnt++;}for(int i=year1+1;i<year2;i++){//printf("%d\n",leap(i));if(leap(i)) cnt++;}if(year2!=year1&&leap(year2)){if(month2>2) cnt++;else if(month2==2&&day2==29) cnt++;}printf("Case %d: %d\n",++kase,cnt);}return 0;
}

方法二:

方法一就是最原始的思想,第一个年份判断一下,中间每个年份判断一下,最后一个年份判断一下。但是提交上去超时。

1、对方法一中的第一点,查找月份,我们可以不用strcmp函数,只用判断每个月份前两个字母就行。这函数费时。

2、对方法一中的第二点,查找总共的闰年数,我们可以不用每个年份单独判断。这里介绍一个方法cnt=(year2/4-year2/100+year2/400)-(year1/4-year1/100+year1/400);意思就是查找年份为year1+1,year1+2,...,year2的闰年的个数。比如year1=2000,year2=2004,那么cnt=1。

对这两点优化之后,代码符合要求。如下:

#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
bool leap(int year){if((year%4==0&&year%100!=0)||year%400==0) return true;return false;
}
int main(){int T,day1,year1,day2,year2,kase=0;char month1[20],month2[20];scanf("%d",&T);while(T--){scanf("%s %d, %d",month1,&day1,&year1);scanf("%s %d, %d",month2,&day2,&year2);int cnt=(year2/4-year2/100+year2/400)-(year1/4-year1/100+year1/400);if(leap(year1)){if(month1[0]=='J'&&month1[1]=='a'||month1[0]=='F') cnt++;}if(leap(year2)){if(month2[0]=='J'&&month2[1]=='a'||month2[0]=='F'&&day2<29) cnt--;}printf("Case %d: %d\n",++kase,cnt);}return 0;
}

LightOJ-1414-February 29--总共多少个闰日?--两种解法相关推荐

  1. UVA12439 February 29【日期计算】

    It is 2012, and it's a leap year. So there is a "February 29" in this year, which is calle ...

  2. 用C语言计算手机的九宫格图案解锁总共能绘出多少种图案

    之前在学校的一个社团招募大一新生时,给出了这个题目: 用程序编写完成九宫格图案解锁总共能绘出多少种图案 需要满足的要求有: 1.至少经过四个点: 2.不能重复经过同一个点: 3.路径上的中间点不能跳过 ...

  3. 蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

    蒜厂有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动. 请写一个程序,计算你总共能够到达多少块黑色的瓷砖. 输入格式 第一行是两个整数 ...

  4. swiper 定义放多少张图片,小程序swiper轮播图,自定义样式,两种方法:原生方法和bindchange方法;将点点改为数字(当前第几张 /总共几张);点击点点跳转当前图片...

    一.点点部分 1.1.通过原生方法 (1)wxml文件 (2)wxss /* 轮播图部分 */ .swiperBar { width: 690rpx; height: 337rpx; margin: ...

  5. 易成新能加码光伏产业链 作价28.29亿收购赛维两子公司

    易成新能11月17日晚公告称,拟通过向债权人发行股份及支付现金方式,合计作价28.29亿元,取得破产重整后江西赛维100%股权和新余赛维100%股权. 同时,公司拟向控股股东中国平煤神马集团等5名对象 ...

  6. java判断总共天数_Java判断两个日期相差天数的方法

    本文实例讲述了Java判断两个日期相差天数的方法.分享给大家供大家参考.具体如下: import java.util.Calendar; public class DateDifferent{ pub ...

  7. 2018.3.29 网页中嵌套网页的两种方法

    第一种: <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8"& ...

  8. java判断总共天数_java 判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份 ...

  9. 手机的九宫格图案解锁总共能绘出多少种图案?LeetCode 351. Android Unlock Patterns

    需要满足的要求有: 至少经过四个点: 不能重复经过同一个点: 路径上的中间点不能跳过(如从1到3一定会经过2): 如果中间的点是之前已经用过的,那么这个点就可以被跳过(如213,因为2已经被用过,1就 ...

最新文章

  1. [pyinstaller]PermissionError: [Errno 13] Permission denied:C:\Users\xxx\AppData\Local\ucrtbase.dll
  2. 函数指针数组在ARM异常中断处理中的应用
  3. 83998 连接服务器出错_新生福利 | 使用 Node.Js 开发服务器
  4. nginx部署与小程序配置
  5. 语言prodave以太网通讯_工业以太网通讯
  6. Docker 安装solr 配置IK分词,说明
  7. 刷新mac地址命令_常用网络检测命令-必备技术
  8. 用python进行归并排序,用Python做归并排序
  9. NLP 带你分析 —— 扎克伯格在听证会上说了什么?
  10. nodejs进程异常退出处理方法
  11. python工资一般多少西安-Python让我在西安成为高薪quot;贵族”
  12. 下载哨兵1精轨数据教程
  13. 工程矩阵理论 Hermite 矩阵
  14. 国民感冒众生相,“微大夫”电磁脉冲预防+舒缓
  15. 【高级篇 / System】(7.0) ❀ 04. 高可用性 HA 配置 ❀ FortiGate 防火墙
  16. (附源码)ssm小型超市管理系统的设计与实现 毕业设计 011136
  17. 正文样式设置必看:你知道最好不要直接在正文样式中设置首行缩进吗
  18. 【报告分享】2020吃货人群图鉴-Mob研究院(附下载)
  19. Final Cut Pro 导出视频教程「上」
  20. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍

热门文章

  1. 关于minizip-ng无法解压unix下压缩的带有文件夹的zip文件
  2. Centos如何安装vnc
  3. Java基础(Java补码)
  4. jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
  5. English--谚语
  6. 地图学与地理信息系统类毕业论文文献都有哪些?
  7. AI 工具分享第 4 期:13 款国外免费AI视频生成工具
  8. Python 爬虫十六式 - 第八式:实例解析 - 全书网
  9. 二、Relational Model 相关模型的运算
  10. 使用Relational Cache加速Spark数据分析