夔新梅 发表于 2025-12-13 10:45:02

题解 SP10366 CODEIT03 - Play with Dates

题解 SP10366 CODEIT03 - Play with Dates

题目大意

给定日期(日、月、年),计算对应的星期几并输出。
算法思路

Zeller's Congruence 算法

本题要求根据日期计算星期几,可以使用 Zeller's Congruence 公式直接计算。这是一个 $O(1)$ 时间复杂度的算法。
公式说明

$h = \left(q + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + K + \left\lfloor \frac{K}{4} \right\rfloor + \left\lfloor \frac{J}{4} \right\rfloor + 5J \right) \bmod 7$
其中:

[*]$q = d$(日)
[*]如果 $m < 3$,则 $m = m + 12$,$y = y - 1$
[*]$K = y \bmod 100$(年份后两位)
[*]$J = \left\lfloor y / 100 \right\rfloor$(世纪数)
结果映射

计算结果 $h$ 与星期的对应关系:

[*]0 → Saturday(星期六)
[*]1 → Sunday(星期日)
[*]2 → Monday(星期一)
[*]3 → Tuesday(星期二)
[*]4 → Wednesday(星期三)
[*]5 → Thursday(星期四)
[*]6 → Friday(星期五)
C++ 实现代码

h = (q + (13 * (m + 1)) / 5 + k + k / 4 + j / 4 + 5 * j) % 7; // 个人习惯,改成小写AC 代码

#include#define youhua ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;string days[] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; // 星期,顺序很重要int gs(int d, int m, int y) {    // 预处理    if (m < 3) { // 在 Zeller's Congruence 公式中月份范围是 3 到 14,我们要转换成现在的日期方法!      m += 12;      y -= 1;    }    int q = d;    int m1 = m;    int k = y % 100;    int j = y / 100;    // 预处理结束    int h = (q + (13 * (m1 + 1)) / 5 + k + k / 4 + j / 4 + j * 5) % 7; // 公式    return h; // 返回天数}int main() {    youhua;    int t;    cin >> t;    while (t--) {      int d, m, y; // 这个就不用解释了吧      cin >> d >> m >> y;      int h = gs(d, m, y); // 套用公式      cout

猷浮 发表于 2025-12-19 20:20:51

感谢,下载保存了

班嘉淑 发表于 2026-1-12 00:30:44

收藏一下   不知道什么时候能用到

赵淳美 发表于 2026-1-14 17:03:59

新版吗?好像是停更了吧。

表弊捞 发表于 2026-1-17 15:52:11

不错,里面软件多更新就更好了

汹萃热 发表于 2026-1-18 09:30:16

鼓励转贴优秀软件安全工具和文档!

电棘缣 发表于 2026-1-19 06:06:01

这个有用。

娄静曼 发表于 2026-1-22 14:18:36

感谢分享

郦湘云 发表于 2026-1-23 02:50:07

用心讨论,共获提升!

萨瑞饨 发表于 2026-1-25 02:43:09

谢谢楼主提供!

奄幂牛 发表于 2026-1-25 09:21:42

东西不错很实用谢谢分享

荪俗 发表于 2026-1-26 03:33:27

懂技术并乐意极积无私分享的人越来越少。珍惜

战匈琼 发表于 2026-1-26 08:30:00

很好很强大我过来先占个楼 待编辑

韦逸思 发表于 2026-1-29 03:42:11

新版吗?好像是停更了吧。

狭踝仇 发表于 2026-2-1 02:25:08

收藏一下   不知道什么时候能用到

强怀梅 发表于 2026-2-2 11:30:47

感谢发布原创作品,程序园因你更精彩

粒浊 发表于 2026-2-7 09:13:04

很好很强大我过来先占个楼 待编辑

庾签 发表于 2026-2-8 18:06:31

yyds。多谢分享

狭踝仇 发表于 2026-2-9 09:53:16

谢谢分享,辛苦了

仰翡邸 发表于 2026-2-10 17:59:02

用心讨论,共获提升!
页: [1] 2
查看完整版本: 题解 SP10366 CODEIT03 - Play with Dates