- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法与程序实践习题解答4(日期时间).
目 录
CS41:判断闰年 1
CS42:细菌繁殖 3
CS43:日历问题 5
CS44:玛雅历 7
CS45:时区间时间的转换 9
CS46:不吉利的日期 14
CS47:特殊日历计算 15
《算法与程序实践》习 题 解 答4——日期和时间处理
在很多具体的程序设计中,经常会遇到与日期和时间处理相关的问题。首先我们来了解一下日期和时间格式。
世界各地有多种格式来表示日期和时间。对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd/yyyy”,如将“2009 /11/07”改成这种格式,对应的则是”11/07/2009”。对于时间的格式,则常有12小时制和24小时制的表示方法,24小时制用0-24来表示一天中的24小时,而12小时制只采用1-12表示小时,再加上am/pm来表示上午或下午,比如”17:30:00”是采用24小时制来表示时间,而对应的12小时制的表示方法是”05:30:00pm”。注意12:00:00pm表示中午12点,而12:00:00am表示凌晨12点。
基本思想:这类问题一般会涉及到不同日历表示法之间的相互转换。解决此类问题的基本思想是找到一种公共的基准,并通过基准进行不同日历之间的转换。日期和时间处理问题一般不涉及很难的算法,但有时会有一些特殊情况需要处理,如果考虑不到就会出错。因此需要一些耐心处理细节问题,可以比较好地训练编程的严谨性。下面通过一些具体的实例说明日期和时间处理上的常见问题及其解答。对于每一道例题,我们将给出问题描述、输入输出要求、输入输出样例、解题思路、参考程序和实现中常见的问题。
CS41:判断闰年
(来源:poj.grids.cn 2733)
问题描述:
判断某年是否是闰年。公历纪年法中,能被4 整除的大多是闰年,但能被100 整除而不能被400 整除的年份不是闰年,如1900 年是平年,2000 年是闰年。
输入:
输入数据一行,仅含一个整数a(0 a 3000)。
输出:
输出要求一行,如果公元a 年是闰年输出Y,否则输出N。
输入样例:
2006
输出样例:
N
解题思路:
这个题目主要考察闰年的定义,使用基本的逻辑判断语句就可以了。考虑到输入的范围在0到3000之间,所以判断闰年时不必考虑能被3200整除的年份不是闰年的判定条件。程序应该包括三个基本的步骤:正确读入要判定的年份a;判定a是否为闰年;给出正确的输出。
闰年的判定方法
判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰.
公历闰年的精确计算方法?
(按一回归年365天5小时48分45.5秒)
①、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
③、对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)(此按一回归年365天5h4845.5计算)。
此外,如依照现有太阳年的长度与上述闰年规则,每8000年又约差一日,因此约翰·赫歇尔提议每逢4000的倍数不闰,如西元4000年。但距此一年份来临尚有约二千年之遥,因此还未曾真正纳入规则或实施过。又由于地球公转速率的不稳定与众多影响因素,届时是否需要纳入此规则仍有疑问。
原因:若一年按365天5h4846(此时86400年也是闰年)计算,一年日数必须是整数,不便将零时数计入,所以取365天为一年,则余5时48分46秒,积至4年约满一 日,所以4年一“闰日”,谓之“闰年”,无“闰日”之年为平年,即平年365天,闰年366天。但到4年之时,仅有23时15分4秒闰一日,欠缺44分56秒;积至100年(25闰)时就欠缺18时43分20秒,约合3 / 4日,所以满100年不闰;此时又余5时16分40秒,积至400年余21时6分40秒又闰;又欠缺2时53分20秒,积至3200年计欠缺23时6分40秒,所以满3200年不闰;此时又余53分20秒,积至86400年刚好24 时又一闰,这是不余不欠,需重计算,所以按阳历计算就有上面的闰年规则。
按一回归年365天5h4845.5计算:3200年多出16000小时153600分145600秒 =18600小时26分40秒,共32*24+8=136个闰年=776*24=18624小时 18600小时,所以只能算到775个闰年,3200不是闰年,于是775*24=18600,多出了26分40秒怎么办需要多少个周期弥补?答案是54个周期,为17280
文档评论(0)