V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jedihy
V2EX  ›  算法

求某一特定年有多少个周六周日

  •  
  •   jedihy · 2017-10-07 13:52:17 +08:00 · 4765 次点击
    这是一个创建于 2615 天前的主题,其中的信息可能已经有所发展或是发生改变。
    考虑闰年
    第 1 条附言  ·  2017-10-08 01:13:00 +08:00
    这题是有 O(1)时间的解法的,但是应该不要求
    10 条回复    2017-10-08 10:16:23 +08:00
    gam2046
        1
    gam2046  
       2017-10-07 14:14:33 +08:00   ❤️ 3
    不用求,是固定的。闰年的前一年是 53 个之后三年都是 52 个,如此往复。


    2000 年是闰年,则 1999 年有 53 个,2000-2002 年都是 52 个;
    2003 年有 53 个,2004-2006 年有 52 个。
    est
        2
    est  
       2017-10-07 14:19:17 +08:00   ❤️ 2
    import v2ex

    v2ex.search('特定年有多少个周末')
    pla
        3
    pla  
       2017-10-07 14:19:28 +08:00 via iPhone
    Python datetime 模块可以直接算指定日期是周几,其他语言应该也有类似的。
    用现成的就不涉及具体算法,跑题了
    Chrisplus
        4
    Chrisplus  
       2017-10-07 15:18:12 +08:00
    幸运 52,闰年多一次幸运
    CEBBCAT
        5
    CEBBCAT  
       2017-10-07 16:56:50 +08:00 via Android
    知到某一年一月一号是周几和这一年有多少天就够了,

    可以把,这一年所有日子排成一排,周几是循环出现的
    jedihy
        6
    jedihy  
    OP
       2017-10-07 22:54:03 +08:00 via iPhone
    @gam2046 52 周不代表周六日
    gam2046
        7
    gam2046  
       2017-10-07 23:03:39 +08:00
    @jedihy 请自行验证,举出反例。我是用程序跑了一遍,验证结果后,才说的。
    jedihy
        8
    jedihy  
    OP
       2017-10-08 00:32:11 +08:00
    @gam2046 2000 年有 53 个周六,53 个周日
    jedihy
        9
    jedihy  
    OP
       2017-10-08 00:33:37 +08:00
    @Chrisplus 不对,今年你都错了,今年有 53 个周日
    gam2046
        10
    gam2046  
       2017-10-08 10:16:23 +08:00
    @jedihy 感谢,确实是我错了。检查了下之前写的程序,时间递增加错了。

    重新写了一遍,观察一下,以 2000 年作为原点来看,2000 年周六与周日各有 53 个。
    之后先隔 4 年,第五年( 2005 )有 53 个周六,再隔 5 年,第六年( 2011 )有 53 个周六,如此往复;
    周日则先隔 5 年,第六年( 2006 )有 53 个周日,再隔 4 年,第五年( 2012 )有 53 个周日,如此往复;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5876 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:37 · PVG 10:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.