- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据这个 Seven Day Week Entry on WikiPeda,在美国使用阴历时一年有 52 周.
使用这些计算假设,我想要通用算法,无论语言如何告诉我哪些月份的重复天数为 5。
参见 this question .(这只给我星期五,不知道答案有没有优化)
我想添加以下内容:
Why 5 Fridays, 5 Saturdays and 5 Sundays don’t occur every 823 years ,
因此,只要给定任何合理的年份,该算法就会返回该年内日期重复 5 次的每个月份组合,这样我就不必转到上面的链接来弄清楚它们是什么。
语言相关的函数和方法:
本着下面伟大答案的精神,我想我应该添加一些 Jim Mischel 提到的内置函数:
那些是主要的。如果有人有更多,请告诉我。
最佳答案
请注意,如今几乎所有编程语言都带有库函数,可以为您完成所有这些工作。或者第三方有这样的库。但是如果你想自己计算的话。 . .
正如您的链接所解释的那样,任何有 31 天的月份都会有五次出现三天。如果这个月从星期日开始,那么就会有五个星期日、五个星期一和五个星期二。
如果您知道一年的第一天是哪一天,那么计算任何一个月的第一天就很容易了。如果你用 0 表示星期日,1 表示星期一,2 表示星期二,等等,那么你可以通过做一点模运算来找到任何一个月的第一天。
二月一日等于一月一日加31模7即:
feb1 = (jan1 + 31) % 7
所以 2014 年从星期三开始。那将是第 3 天。
(3 + 31) % 7 = 34 % 7 = 6 (Saturday)
您可以通过查看今年的日历来验证这一点。
使用该技术计算其他月份需要您构建一个表,其中包含每个月末的累计天数。但这不是必需的。您真正需要的是一个包含 12 个条目的表格,该表格告诉您每个月的偏移量,以及一个小逻辑,用于在闰年的 2 月之后的月份加 1。
以2014年为例。下表显示了每个月的开始日期。
January Wednesday (3)
February Saturday (6)
March Saturday (6)
April Tuesday (2)
May Thursday (4)
June Sunday (0)
July Tuesday (2)
August Friday (5)
September Monday (1)
October Wednesday (3)
November Saturday (6)
December Monday(1)
我们真正需要的是每个月的补偿。您会看到 2 月的第一天和 1 月的第一天之间的差异是 3。3 月也一样。对于 4 月,差异为 -1。为了使其在模运算中起作用,您需要将其设为 6。无论如何,您可以构建一个表来告诉您每个月需要添加的偏移量:
January 0
February 3
March 3
April 6
May 1
June 4
July 6
August 2
September 5
October 0
November 3
December 5
鉴于此,如果您知道一年的第一天,那么您可以计算出任何一个月的第一天。查看日历,您会看到 2014 年 9 月的第一天是星期一。让我们看看这个公式是否有效。一月的第一天是星期三,偏移量表显示我们需要为九月添加偏移量 5:
(3 + 5) % 7 = 1 (Monday)
对于闰年,如果您要查找二月之后的一个月,则需要将偏移量加一。以 2012 年为例。一月的第一天是星期日。使用与上述相同的公式,并为闰年加 1,2012 年 9 月 1 日为:
(0 + 5 + 1) % 7 = 6 (Saturday)
唯一的技巧是找到 1 月 1 日是星期几,并且在评论中为您提供了该链接。之后是简单的查表、加法和取模运算。
顺便说一下,您可以通过创建第二个用于闰年的偏移表来稍微加快算法。该表将是:
January 0
February 3
March 4
April 0
May 2
June 5
July 0
August 3
September 6
October 1
November 4
December 6
关于algorithm - 这个有趣事件的最快算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24309978/
什么是更快的安卓? Color.rgb(184, 134, 011); 或 Color.parseColor("#234181"); 还是别的什么? 答案:最快的似乎是: int mycolor =
没错, 基本上我需要计算出从服务器到最终用户的最短路线。我有 2 台服务器 - 一台在英国,一台在美国。 我需要根据最终用户的位置确定从哪个服务器加载内容。 我最初想使用 fsock/curl/fgc
我正在阅读固定宽度整数类型 ( cpp reference) 并遇到int_fast8_t、int_fast16_t、int_fast32_t 和 int_least8_t 类型,int_least1
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 6年前关闭。
我有大量目录,我想尽快读取所有文件。我的意思是,不是 DirectoryInfo.GetFiles 快,而是“get-clusters-from-disk-low-level”快。 当然,.NET 2
我尝试寻找最小的可被1到n整除的数字,现在我正在寻求有关进一步压缩/使我的解决方案更有效的方法的建议。如果也有O(1)解决方案,那将非常酷。 def get_smallest_number(n):
有很多不同的方法可以在驱动程序之间选择元素。我想知道哪一个最快且最适合 native 应用程序(iOS 和 Android)。 Appium Driver 类有: findElementByAcces
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
让矩阵 A 说 A = magic(100);。我见过两种计算矩阵 A 的所有元素之和的方法。 sumOfA = sum(sum(A)); 或者 sumOfA = sum(A(:)); 其中一个比另一
我想为玩具车在没有障碍物的平面 (2d) 上规划一条路线。玩具车应该从点 (p1x,p1y) 移动到 (p2x,p2y)(又名狄利克雷边界条件)。此外,玩具车在起点的速度是(v1x,v1y),终点处要
假设有 n 个 3 维对象(多面体)。最快的方法是计算所有对象的交集O(n^2)? 现在,我正在使用一个基本上强制 T(n) 等于 n ^ 2 的库: for each object: // ther
关闭。这个问题需要 details or clarity 。它目前不接受答案。 想改进这个问题吗? 添加细节并通过 editing this post 澄清问题。 关闭 5 年前。 Improve
在 c: 上,我有数以万计的 *.foobar 文件。它们在各种各样的地方(即子目录)。这些文件的大小大约为 1 - 64 kb,并且是纯文本。 我有一个 class Foobar(string fi
我的基本问题是有多个线程做一些事情,其中一些需要比其他线程更多的时间(20 倍甚至更多),他们需要的时间只取决于起始值,但不能从起始值预测单独他们需要多少时间。为了减少更快线程的空闲时间,我想通过
好的,我有一个疑问: select distinct(a) from mytable where b in (0,3) 什么会更快,上面的还是 select distinct(a) from myta
问题简介: 我正在开发一个生态生理模型,我使用了一个名为 S 的引用类列表。存储模型需要输入/输出的每个对象(例如气象、生理参数等)。 此列表包含 5 个对象(请参见下面的示例): - 两个数据帧,S
我有一个正在工作的问题陈述,但我仍然想知道更高效、更快,更重要的是正确设计来处理下面提到的场景。 我有一个 POJO 类 class A { String s; Double d; } 我正在
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this q
关于 LLVM 如何优化代码,关于 SO 以及整个网络都有一些非常好的描述。但这些都无法回答我的具体问题。 在 Xcode 中,项目和目标设置中有各种代码优化选项。我理解在开发过程中不需要优化,但为什
我正在用 C# 开发一个服务器项目,在收到 TCP 消息后,它会被解析并存储在一个精确大小的 byte[] 中。 (不是固定长度的缓冲区,而是存储所有数据的绝对长度的字节[]。) 现在为了阅读这个 b
我是一名优秀的程序员,十分优秀!