泽勒一致性

2010年10月8日

Zeller一致性是一种简单的数学方法,用于确定给定日期的星期几。

19世纪80年代,德国数学家克里斯蒂安·泽勒(Christian Zeller)注意到,如果你把一年从3月计算到2月,每个月的累计天数几乎形成一条直线;这是可行的,因为通常会扰乱直线的二月被移到了末尾。他算出了公式⌊(13−1)/5⌋给出每月月初移动的工作日数,其中是月份数。

然后很容易计算任何给定日期的星期几:加上月份的日期、自3月以来月份数的偏移量、每年的偏移量以及闰年和闰世纪的额外偏移量(记住一月和二月的日期减去一年),取整个mod 7。自己计算算术很有趣,但如果你不想花时间,整个公式都会显示在解中。

您的任务是编写一个函数,该函数使用Zeller同余来计算任意给定日期的星期几。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页码:1 2

5对“Zeller一致性”的回应

  1. […]今天的编程实践练习,我们的目标是实现Christian Zeller为[…]创建的函数

  2. 雷姆科·尼梅耶

    My Haskell解决方案(请参阅http://bonsaicode.wordpress.com/2010/10/08/programming-praxis-zeller%E2%80%99s-同余/对于带有注释的版本):

    data Weekday=Su|Mo|Tu|We|Th|Fr|Sa派生(枚举、等式、显示)zeller::国际->国际->国际->工作日zeller年-月-日=toEnum$mod(天+div(13*m-1)5+d+div d4+div c4-2*c)7其中y=如果月份<3,则年份-其他年份m=如果月份<3,则月份+10,否则月份-2(c,d)=divMod y 100
  3. 杀人
    #f=k+地板(13m-1)/5)+d+地板(d/4)+地板(c/4)-2c mod 7def zeller(年、月、日)months=%w[三月四月五月六月八月九月十月十一月十二月一月二月]工作日=%w[周日-周一-周二-周三-周四-周五-周六]k=天m=months.index(month.downcase)+1y=(m<=10)?年份:第一年d=y%100c=年/100f=(k+((13*m)-1)/5).楼层+d+(d/4).楼板+(c/4).楼层-(2*c))%7工作日结束普斯·泽勒(2010年10月8日)
  4. Khanh Nguyen先生
    开放式系统打开系统。收藏。通用打开Microsoft。F竖琴。收藏打开Microsoft。F竖琴。数学(*跟随http://en.wikipedia.org/wiki/Zeller%27s_conjuence(英文)*)让zeller_conguence(年:int)(月:int)let weekdays=[“周六”;“周日”;“周一”;“周二”;“周三”;“周四”;“周五”]设m=浮动(如果(月份<3),则月份+12其他月份)设y=如果(月<3),则年份-1其他年份设K=浮动(y%100)设J=浮动(y/100)设h=浮标(日)+地板((m+1.0)*26.0/10.0)+K+地板(K/4.0)+地面(J/4.0)-2.0*J平日。[整数(h)%7]泽勒一致性2010 10 10泽勒一致性2010 2 10
  5. […]计算一周中哪一天的算法,一个在标准前奏曲中,另一个在Zeller一致性练习中。在今天的练习中,我们再给出三种算法来计算[…]的日期

留下评论