日历问题详解 您所在的位置:网站首页 日历一周开始日为什么是周日 日历问题详解

日历问题详解

2024-07-11 19:40| 来源: 网络整理| 查看: 265

目录

题目:

分析:

C++ STL代码:

总结:

题目: 日历问题 问题描述在我们先在使用的日历中,闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,他们不是闰年。例如:1700,1800,1900和2100年不是闰年,而1600,2000和2400是闰年。给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几输入数据输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后最后一行是-1,不必处理。可以假设结果的年份不会超过9999. 输出要求

对每个测试样例,输出一行,该行包含对应的日期和星期几。合适为“YYYY-MM-DD DayOfWeek”。其中“DayOfWeek”必须是下面中的一个:“Monday”,“Tuesday”,“Wednesday”,“Thursday,“Friday”,“Saturday”,“Sunday”。

输入样例

1730 1740 1750 1751

-1

输出样例2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-16 Sunday 分析:

首先这道题看着很复杂,因为涉及闰年和平年天数不一样,闰年366天,2月为29天;平年365天,2月为28天。而且每月的天数也不相同,1、3、5、7、8、10、12月为31天,4、6、9、11月为30天,没有太大的规律可循,所以不能用 逝去的天数  取余一年的天数 。只有星期是每星期都是7天,所以可以用  逝去的天数  取余  7来判断星期几。

首先我们可能想到最蠢的办法一天一天判断,每到7天星期归0,每到月末月数+1,每到12月年数+1,月数归1.但这个办法太蠢,如果7000年的话估计得算到死。

所以我们可能会想到先判断是哪一年,再判断是哪一月,再计算出是哪一天,最后计算是星期几。在年和月判断的时候最开始我们可能是想到用if()else语句,先判断剩余天数是否大于当前年所有天数(闰年366天,平年365天),然后再判断如果是闰年则减去366天,如果是平年则减去365天。最后剩余天数是不够一年所含天数的,所以年份算出来了。同样可以循环判断求出所在月份。最后天数+1就可以了。

那么问题来了,我们怎么判断年份是闰年还是平年,怎么判断月份的天数,我们可能想到用if()else语句来判断,那么我们每次都要判断一下,如果我们事先将一年中每月所含天数用一个数组存起来的话是不是更方便判断,同样,我们是不是也可以用数组将星期几也存进去。所以我们选择数组存储年份所含天数,月份所含天数,星期几字符串。

最后,上面我们是一年一年判断,然后减去年份天数(366/365),那我们在判断一年是闰年后,我们是不是可以肯定接下来的3年都是平年,如果剩余天数够的话我们是不是就可以直接减去3*365天。然后再判断是否是闰年。这样运行时间又能变为原来1/4。

注意:天数最后要+1;要用取余(%)判断是否是闰年;输出格式要控制好,日期格式是2000-09-01,如过剩余天数是个位数,则要在前边加上0,具体做法可以参照下面代码,C++控制数据按照指定位数输出,主要用到C++两个输出控制,setw(位数),和setfill(指定字符)。需要加上头#include 。

cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有