巧算星期几
基姆。拉尔森
基姆拥有计算机学科的博士学位。他对数据库,算法和数据结构有着浓厚的兴趣。他的联系地址是 (原文为丹麦文--译者注) 31,DK-5270,Odense N,Denmark,或发 E-mail 至 :kslarsen@imada.ou.dk。
简介
布鲁斯 施耐尔
“四,六,九,十一,三十天就齐……”儿歌是这么唱的;或许你也曾经掰着手指头翻来覆去地数,让赶上单数的指头代表只有30天的短月吧?这样的口诀对我们是很管用的(我就是念叨着这首傻乎乎的儿歌长大的),可是电脑就没有这份“灵感”了。当然,我们可以用一大堆IF-THEN-ELSES的语句或几个CASE来编写计算程序,让它计算某个指定日期是星期几。
不过我更喜欢基姆拉尔森在本月的“算法小径”中为我们带来的新技巧,因为他的方法另辟蹊径,从一个全新的方向着手解决日期计算的问题。其实,并没有什么数学公式能算出某个指定日期是星期几,不过我们可以试着拼凑一个,如果我们的尝试成功了,你就能拥有一个易于编程的数学公式,并能用它自动计算哪天是星期几了。
顺便说一句,如果你已经设计出更巧妙的算法,或是在已有的方法上有了新突破的话,不妨告诉我,我一定洗耳恭听。我的联系方法是schneier@chinet.com,或者在DJJ编辑部给我留张便条就行。
你有没有疑惑过你的电脑怎么就知道今天是星期三呢?就算你的电脑关机了,你重启后设定了新日期,它也能立即知道这天是星期几。
在你还是个孩子的时候,你可能见过一种纪录记录着年,月,日的表格,只要加上几个数字,和它相连的另一张表格就会告诉你这个日期是星期几。当然,计算机硬盘的操作系统里也可以加入这样的计算表。不过有一种简单的方法可以轻松地算出某天是星期几;而且这个方法只占用很少的内存空间,而那些只能推算几百年的表格可就太占地方了。
如果目前你的电脑还不具备推算与日期对应的星期数的功能,现在就不妨在自己的程序中试试下面的公式。