计算两个日期之间的第一个星期一有多少个
Posted
技术标签:
【中文标题】计算两个日期之间的第一个星期一有多少个【英文标题】:Calculate how many Monday the 1st between two dates 【发布时间】:2015-09-01 04:56:14 【问题描述】:是否可以?
我使用 C++ 编写了两个函数来计算两个日期之间的天数:
int rdn(int y, int m, int d)
if (m < 3) y--, m += 12; ;
return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
int days = rdn(2015, 01, 01) - rdn(2015, 12, 31);
使用 Python:
def days_between(d1, d2):
d1 = datetime.strptime(d1, "%Y-%m-%d")
d2 = datetime.strptime(d2, "%Y-%m-%d")
return abs((d2 - d1).days)
print(days_between('2015-01-01', '2015-12-31'))
但我不明白如何更新我的函数来计算星期一的第一天。
【问题讨论】:
你试过什么?您可以使用万年历 (en.wikipedia.org/wiki/Perpetual_calendar)。这不只是数数的问题吗? 如果您知道 1 月 1 日是工作日,那么确定任何日期的工作日是微不足道的。实际上,如果您知道当年的任何 个工作日,那么计算该年任何其他日子的工作日是微不足道的。您可以轻松地将其扩展到过去或未来的任何年数。见mischel.com/diary/2005/08/08.htm。 我投票决定将此问题作为题外话结束,因为这是正在进行的编程竞赛:hackerrank.com/contests/w17/challenges/count-fridays-the-13-th,解决方案将在 7 天内提供。这个人不关心知识,只关心得分。 @SalvadorDali 我在 Python 中使用日历模块解决了问题。我是算法新手,我学习了。尝试使用此问题的答案来解决hackerrank 问题。你可以?不。而且,在此之前,请仔细思考并阅读主题。非常感谢。 @SalvadorDali 我可以向您展示我的解决方案。你不会找到一行类似的代码。 【参考方案1】:这个算法是一个循环,检查从开始日期(含)到结束日期(含)每个月的第一个工作日,并计算在星期一的那些:
import datetime
def num_monday_the_first_between(start, end):
y, m, d = start.year, start.month, 1
count = 0
while (y, m, d) <= (end.year, end.month, end.day):
if datetime.date(y, m, d).isoweekday() == 1:
count += 1
m += 1
if m == 13:
m = 1
y += 1
return count
print(num_monday_the_first_between(datetime.date(2015,1,1), datetime.date(2015,12,31)))
# Result: 1 (June)
【讨论】:
好直接的答案:)即使它不是最短的可能 请删除你的答案,因为这个问题来自正在进行的编程竞赛。以上是关于计算两个日期之间的第一个星期一有多少个的主要内容,如果未能解决你的问题,请参考以下文章
C语言试题163之计算某一天是对应年的第几天,这一年一共多少天;计算两个日期之间相隔的天数。两个日期由键盘输入。