有一个人能告诉我100年以来的任何一天是星期几

请问这个人是谁,记住不是脑筋急转弯哦!

简介

布鲁斯 施耐尔

“四,六,九,十一,三十天就齐……”儿歌是这么唱的;或许你也曾经掰着手指头翻来覆去地数,让赶上单数的指头代表只有30天的短月吧?这样的口诀对我们是很管用的(我就是念叨着这首傻乎乎的儿歌长大的),可是电脑就没有这份“灵感”了。当然,我们可以用一大堆IF-THEN-ELSES的语句或几个CASE来编写计算程序,让它计算某个指定日期是星期几。

不过我更喜欢基姆拉尔森在本月的“算法小径”中为我们带来的新技巧,因为他的方法另辟蹊径,从一个全新的方向着手解决日期计算的问题。其实,并没有什么数学公式能算出某个指定日期是星期几,不过我们可以试着拼凑一个,如果我们的尝试成功了,你就能拥有一个易于编程的数学公式,并能用它自动计算哪天是星期几了。

顺便说一句,如果你已经设计出更巧妙的算法,或是在已有的方法上有了新突破的话,不妨告诉我,我一定洗耳恭听。我的联系方法是schneier@chinet.com,或者在DJJ编辑部给我留张便条就行。

你有没有疑惑过你的电脑怎么就知道今天是星期三呢?就算你的电脑关机了,你重启后设定了新日期,它也能立即知道这天是星期几。

在你还是个孩子的时候,你可能见过一种纪录记录着年,月,日的表格,只要加上几个数字,和它相连的另一张表格就会告诉你这个日期是星期几。当然,计算机硬盘的操作系统里也可以加入这样的计算表。不过有一种简单的方法可以轻松地算出某天是星期几;而且这个方法只占用很少的内存空间,而那些只能推算几百年的表格可就太占地方了。

如果目前你的电脑还不具备推算与日期对应的星期数的功能,现在就不妨在自己的程序中试试下面的公式。

创建公式

首先,我们要用变量D,M和Y来表示日期。比如,1994年3月1日就用“D=1,M=3,Y=4”记录。我们的目标是让计算结果在0到6之间。0代表星期一,1代表星期二,2代表星期三,依此类推。

1994年3月1日是个星期二,那么“D mod 7(日期变量除以7的余数))))”这个公式对于整个三月份都有效。比如3月18日是星期五,18 mod 7=4;而4正代表星期五。别忘了,整数的除法和求模有着密切的关系。比方说,26除以7商3余5,这就是说,26除以7商数取整等于3,而26除以7求模(简写为26 mod 7)等于5。以上这些意味着19 mod 7=12 mod 7= 5 mod 7=5。在运算规则中,负数求模运算法相似,所以依此类推,-2 mod 7=5, -9 mod 7=5。

在更正式的表达法中,统一用任意整数n和k表达上述关系,那么这个过程可以表达为n=qk+r,这里的q和r的取值范围同样是整数和0。表1中列出了所有月份的变换数据(shift information此处试译为“档级数据”,还请进一步校对--译者注)。为了尽可能地得出规律,二月被排在最后,同理,一月也是如此。

例1(a)中的公式是仿照表1中的变换数据栏所描述的模式而创建的。这个公式中的除法一律是商数取整。所以得数是最接近真正商数的整数。表2得出了此功能得出的有趣的数值。凭直觉,我们不难发现,当M(代表月份的变量)的值以1为单位递增时,2M就成倍增长,而3(M+1)/5就以3/5为增长倍数。

这正是我们仿制3,2,3,2,3这个重复格式所需要的(表中右边的弯括号表明了这一点)。请注意,我们在以7为除数求模,那么从6到2的求模结果就会逐个增加3(顺序是6,0,1,2)。

现在,我们发现了适用于逐月向下推算的校正方法,并希望把它加入刚才的尝试中,就是那个mod7公式。还以1994年3月1日为例,这个日期的M=3。请注意,在例1(b)中,8 mod 7=1,所以当整个公式合并时,必须减去1。在做以7为除数求模的运算时,减1和加6是一样的,因为-1 mod 7=6 mod 7=6。

这样,例1(c)中的公式就可以计算这一年中剩下的月份了。其实,既然我们把一月和二月排在表1的最后,那么只要我们把它们看成是十三月和十四月,就能接着推算1995年的前两个月了。这是因为,虽然它们并不是一个完整的3,2,3,2,3结构,但恰好可以是这个结构的开始,为了使这个公式更完善,我们还是最好把一月和二月看成是上一年的十三月和十四月。
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-02-02
日历? 我? 你自己?
第2个回答  2006-01-29
去找本万年历吧,算来算去太麻烦了

有一个人能告诉我100年以来的任何一天是星期几
首先,我们要用变量D,M和Y来表示日期。比如,1994年3月1日就用“D=1,M=3,Y=4”记录。我们的目标是让计算结果在0到6之间。0代表星期一,1代表星期二,2代表星期三,依此类推。1994年3月1日是个星期二,那么“D mod 7(日期变量除以7的余数))))”这个公式对于整个三月份都有效。比如3...

计算随便一天是星期几的方法
即2049年10月1日(100周年国庆)是星期5。 你的生日(出生时、今年、明年)是星期几?不妨试一试。 不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。 过程的推导:(对推理不感兴趣的可略过不看) 星期制度是一种有古老传统的制度。据说因为《圣...

谁能告诉我计算任意一年月日是星期几的方法啊?
如往前数,(如2008年一月一日至2007年一月一日)余数是几,就用今天往前数几天,那天星期几就是你要求的那天是星期几。星期,又叫周,是一个时间单位,也是现在制定工作日、休息日的依据。星期作为时间周期最早起源于巴比伦。现在世界通行的星期制是罗马皇帝君士坦丁大帝在公元321年3月7日正式确立的。

谁能告诉我怎样才可以算出某日是星期几?
1994年是:5 1 1 4 6 2 4 0 3 5 1 3 这一串数字就能很快地心算出1994年任何一天是星期几。这在手头无年历可查的情况下还是有一定用处的。在那一段我们还列出了最近几年每年对应的十二个数字,用这种方法计算最近几年某年某月是星期几也都还方便。但是要计算自古至今以至遥远未来的公元某年某...

如何计算出一年的第一天是星期几?
1、w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 2、c:世纪(注:一般情况下,在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一;不过如果年份是公元前的年份且非整百数...

JAMOSA唱的100年経っても…的中文意思还有歌词中文意思
[00:09.24]何かひとつ 胸に持ってみろよ\/有一个不知什么试著保存在心里哟 [00:17.33]代わり映えない毎日に\/没有任何更好的每一天 [00:21.20]ふと负けそうになりそうだけど\/偶然快要输,不过 [00:25.56]まわりと比べるのをやめ\/不要与周围比较 [00:29.11]たらやれそうな気が...

2100年的前一天是星期几?
请注意这样一个事实,即从公元元年一月一日开始到现在,每一天都是连续的,而每个星期有7天,也是连续的,也就是说日期和星期是一对一的,没有断档现象。我的基本思想是计算出当前天是从公元元年一月一日开始的第几天,再利用星期的周期性来计算公元任何一天是星期几。假设当前年份为y,并忽略闰年,...

人类在寻找外星生命时,可能发现的最恐怖的事情是什么?
如果每一个机器人都能制造1000个机器人,那么我们就有了100万个机器人,而后是10亿个, 1万亿个。在短短几代人的时间里,我们就可以拥有一个膨胀的球体,里面包含了千万亿个这类设备。科学家称之为冯·诺伊曼机器。 事实上,这是电影《2001太空漫游》中的情节。即使在今天,这可能也是有关地球与外星智慧最现实的...

小学三年级数学题:怎样推算明年的今天是星期几?
1、2004年8月4日是星期三,再过100天:100\/7=14……2,所以是需要用星期三加两天,结果就是星期五。2、2004年9月1日是星期三,这一年的12月8日:这里涉及到了月份的问题,9月是有30天,10月是31天,11月是30天,除去9月1日外,共有29+31+30+8=98天,98\/7=14,所以12月8日还是星期...

三年级计算某一天是星期几的公式
这个公式适用于1583年以后的日期,因为它是基于格里高利历(公历)制定的。通过蔡勒公式,我们可以计算出任何日期对应的星期,这对于日历研究和时间管理非常有帮助。此外,蔡勒公式还可以应用于其他日期计算问题,如判断某一年是否为闰年等。总之,蔡勒公式提供了一种简便的方法来计算日期对应的星期,对于需要...

相似回答